牛倌被通知,他的一只牛逃逸了!所以他决定,马上出发,尽快把那只牛抓回来.
他们都站在数轴上.牛倌在N(0≤N≤100000)处,牛在K(0≤K≤100000)处.约翰有两种办法移动,步行和瞬移:步行每秒种可以让约翰从x处走到x+l或x-l处;而瞬移则可让他在1秒内从x处消失,在2x处出现.然而那只逃逸的牛,悲剧地没有发现自己的处境多么糟糕,正站在那儿一动不动.
那么,牛倌需要多少时间抓住那只牛呢?
仅有两个整数N和K
最短时间
5 17
4
城市管理部门打算好好修一下农场中某条凹凸不平的土路。按市民们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中。 整条路被分成了N段,N个整数A_1, … , A_N (1 <= N <= 2,000)依次描述了每一段路的高度(0 <= A_i <= 1,000,000,000)。城市管理部门希望找到一个恰好含N个元素的不上升或不下降序列B_1, … , B_N,作为修过的路中每个路段的高度。由于将每一段路垫高或挖低一个单位的花费相同,修路的总支出可以表示为: |A_1 - B_1| + |A_2 - B_2| + … + |A_N - B_N| 请你计算一下,FJ在这项工程上的最小支出是多少。城市管理部门向你保证,这个支出不会超过2^31-1。
第1行: 输入1个整数:N * 第2..N+1行: 第i+1行为1个整数:A_i
第1行: 输出1个正整数,表示FJ把路修成高度不上升或高度不下降的最小花费
7
1
3
2
4
5
3
9
3
#include
#include
#include
#include
#include
#define inf 0x7fffffff
using namespace std;
inline int read()
{
int x=0;char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x;
}
int n,a[2005],b[2005];
int c[2005][2005],f[2005][2005];
int ans=inf;
inline bool cmp(int a,int b){return a>b;}
int main()
{
n=read();
for(int i=1;i<=n;i++)
a[i]=b[i]=read();
sort(b+1,b+n+1);
for(int i=1;i<=n;i++)
f[i][0]=inf;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
c[i][j]=f[i-1][j]+abs(b[j]-a[i]);
f[i][j]=min(f[i][j-1],c[i][j]);
}
ans=f[n][n];
sort(b+1,b+n+1,cmp);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
c[i][j]=f[i-1][j]+abs(b[j]-a[i]);
f[i][j]=min(f[i][j-1],c[i][j]);
}
ans=min(ans,f[n][n]);
printf("%d",ans);
return 0;
}
如果你看过《哈利·波特》,你就会知道魔法世界里的照片是很神奇的。也许是因为小魔法师佳佳长的太帅,很多人都找他要那种神奇的魔法照片,而且还都要佳佳和他的MM的合照。那些照片可是非常珍贵的,他到底应该把照片给谁呢?
一共有n个人(以1–n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人。佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i]。然后将初始权值从大到小进行排序,每人就有了一个序号D[i](取值同样是1–n)。按照这个序号对10取模的值将这些人分为10类。也就是说定义每个人的类别序号C[i]的值为(D[i]-1) mod 10 +1,显然类别序号的取值为1–10。第i类的人将会额外得到E[i]的权值。你需要做的就是求出加上额外权值以后,最终的权值最大的k个人,并输出他们的编号。在排序中,如果两人的W[i]相同,编号小的优先。
第一行输出用空格隔开的两个整数,分别是n和k。
第二行给出了10个正整数,分别是E[1]到E[10]。
第三行给出了n个正整数,第i个数表示编号为i的人的权值W[i]。
只需输出一行用空格隔开的k个整数,分别表示最终的W[i]从高到低的人的编号。
10 10
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
10 9 8 7 6 5 4 3 2 1
一块矩形土地被分为N*M的单位正方形,现在要在这块土地埋设取暖管道,管道将从坐标为(1,1)小块(左上角,上部边缘)延伸到(N,M)(右下角,右部边缘)
每种管道将占据一个单位正方形土地.而且管道不能旋转.显而易见,要构成一个管道系统,我们必须保证管道是连续贯通的.
一开始,在地图上标出了已经埋设好的管道.在铺设管道系统时可以利用这些管道,但不能把它们移开铺设新管道;同时,标有树木的方格表示这里是花园,地下不能埋设管道.
下面请你写一个程序,对一个给定的地图,找出有多少种不同的铺设方案.
第一行为两个整数N和M(都不超过10),接下来的M行,每行有N个整数,表示地图中的每一小格.其中1-4依次表示图中四种管道,5表示花园,0表示空地.
单个整数,表示不同方法数.
4 5
0 0 3 2
0 4 0 5
4 0 0 0
4 0 1 0
0 3 0 0
3