UVa 11729 Commando War 贪心
2013-06-02 22:33
459 查看
题目大意:有n个士兵,你要给他们没人分配一项任务,对于第i个士兵,你向他描述这个任务需要Bi时间,他完成这个任务需要Ji时间,你描述完了之后他可以独立去完成这个任务,但你一次只能给一个人描述任务,问执行完这n个任务一共需要多少时间。
解题报告:这题利用了贪心的思想,首先我们应该确定应该以什么样的顺序来描述任务,很显然,应该先对完成这个任务时间比较长的士兵描述他的任务,当两个士兵的任务完成需要的时间相同时,描述需要的时间越短就先选择哪个。我们可以定义一个结构体,然后对这个结构体先排一下序,然后就从排序后的第一项开始,定义两个变量,time1,time2,time1表示描述完当前任务的时间,time2表示执行完当前任务之前的所有任务所用的时间,最后time2即为我们要求的值。
View Code
解题报告:这题利用了贪心的思想,首先我们应该确定应该以什么样的顺序来描述任务,很显然,应该先对完成这个任务时间比较长的士兵描述他的任务,当两个士兵的任务完成需要的时间相同时,描述需要的时间越短就先选择哪个。我们可以定义一个结构体,然后对这个结构体先排一下序,然后就从排序后的第一项开始,定义两个变量,time1,time2,time1表示描述完当前任务的时间,time2表示执行完当前任务之前的所有任务所用的时间,最后time2即为我们要求的值。
#include<cstdio> #include<algorithm> struct node { int B,J; }sold[1005]; bool cmp(node a,node b) { if(a.J>b.J) return true; if(a.J==b.J) return a.B<b.B; return false; } int main() { int N,sum,B[1005],J[1005],l=1; while(scanf("%d",&N)&&N) { for(int i=1;i<=N;++i) scanf("%d%d",&sold[i].B,&sold[i].J); std::sort(sold+1,sold+N+1,cmp); int time1=sold[1].B; sum=sold[1].B+sold[1].J; for(int i=2;i<=N;++i) { time1+=sold[i].B; if(time1+sold[i].J>sum) sum=time1+sold[i].J; } printf("Case %d: %d\n",l++,sum); } return 0; }
View Code
相关文章推荐
- UVA 11729 COMMANDO WAR【贪心】
- UVa 11729 Commando War / 贪心
- UVA 11729(Commando War-按执行时间贪心)
- Uva 11729 Commando War - 水题 - 贪心
- UVa 11729 Commando War——贪心
- UVA - 11729 Commando War (贪心)
- UVa11729 Commando War(贪心)
- UVa Commando War 11729 (贪心)
- UVA 11729 Commando War 贪心的思想
- Uva 11729 Commando War【贪心】
- UVA - 11729 Commando War (贪心)
- Uva---11729Commando War(贪心)
- UVA 11729 - Commando War(贪心)
- Uva 11729 - Commando War ( 贪心 + 水 )
- UVa 11729 Commando War (贪心)
- [ACM_水题] UVA 11729 Commando War [不可同时交代任务 可同时执行 最短完成全部时间 贪心]
- UVA - 11729 Commando War ( 贪心 )
- uva 11729 - Commando War(贪心)
- UVa 11729 - Commando War(贪心)
- UVa 11729 - Commando War(贪心)