Commando War UVA - 11729(机智)
2017-09-25 21:19
239 查看
题目大意:
一个将军要布置给N个手下以任务。对士兵I而言,将军布置任务需要时间Xi,士兵执行任务需要时间Yi,求所有任务完成的最短时间。
题目链接:https://vjudge.net/problem/UVA-11729
题目分析:
对于两个士兵J,K而言,分别有Xj,Yj,Xk,Yk。如果Yj>Yk。那么无论这两个任务怎么安排任务,第二个任务开始执行的时间始终是Xj+Xk。那么问题来了J,K谁被安排在第二个执行呢?如果安排J的话,那么最长长度为XJ+XK+YJ。如果安排K的话,那么最长长度为max(XJ+XK+YK , XJ+YJ).可以见到,后者无论哪个都是明显小于前者的。所以如果把Yi长的士兵放到后面安排。那么最长时间长度会变长。所以Y长的要放到最前面安排。所以对Y排个序就好了。
代码如下:
一个将军要布置给N个手下以任务。对士兵I而言,将军布置任务需要时间Xi,士兵执行任务需要时间Yi,求所有任务完成的最短时间。
题目链接:https://vjudge.net/problem/UVA-11729
题目分析:
对于两个士兵J,K而言,分别有Xj,Yj,Xk,Yk。如果Yj>Yk。那么无论这两个任务怎么安排任务,第二个任务开始执行的时间始终是Xj+Xk。那么问题来了J,K谁被安排在第二个执行呢?如果安排J的话,那么最长长度为XJ+XK+YJ。如果安排K的话,那么最长长度为max(XJ+XK+YK , XJ+YJ).可以见到,后者无论哪个都是明显小于前者的。所以如果把Yi长的士兵放到后面安排。那么最长时间长度会变长。所以Y长的要放到最前面安排。所以对Y排个序就好了。
代码如下:
/*by kzl*/ #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> #include<queue> #include<stack> #include<vector> using namespace std; const int maxx = 1000+50; const int INF = 0x3f3f3f3f; typedef long long LL; int n; struct My{ int x,y; }re[maxx]; bool cmp(My a,My b) { return a.y>b.y; } int main(){ int icase = 1; while(scanf("%d",&n)!=EOF) { if(n==0)break; for(int i=0;i<n;i++)scanf("%d%d",&re[i].x,&re[i].y); sort(re,re+n,cmp); int sum = 0;int ma = -1; for(int i=0;i<n;i++){sum+=re[i].x;ma = max(ma,sum+re[i].y);}//注意可能最长长度出现在中间。所以要边更新边判断。 printf("Case %d: %d\n",icase++,ma); } return 0; }
相关文章推荐
- 突击战(Commando War,UVa 11729)
- UVA 11729 - Commando War
- UVa 11729:Commando War(贪心)
- UVa 11729 Commando War 突击战
- UVA 11729 - Commando War(贪心 相邻交换法)
- UVa 11729 Commando War 突击战
- uva 11729-Commando War
- 指南第一章 例题二 UVA 11729 Commando War(贪心算法)
- uva_11729_Commando War(貪心)
- 突击战(Commando War, UVa 11729)
- 贪心-突击战(Commando War, UVa 11729)
- UVA 11729(p2)----Commando War
- Commando War(UVa 11729)
- UVA 之11729 - Commando War
- UVA 11729 Commando War
- UVA 11729 Commando War
- UVa11729 Commando War(贪心)
- UVa 11729 Commando War (贪心)
- UVA 11729 - Commando War
- UVA 11729 Commando War(求最少的时间)