UVa 11729 Commando War 突击战
来源:互联网 发布:相机软件大全 编辑:程序博客网 时间:2024/05/29 15:04
题意:你要给n个部下分派任务。对于第i个部下,你需要花费Bi的时间去交待任务,他需要花费Ji的时间去完成任务。每个部下一旦接到任务就会立刻无间断地执行直到完成任务。交待任务时不能同时对两个部下交待任务。你需要选择交待任务的顺序,使得所有任务尽快完成。
贪心题。既然是交待任务的顺序,那么只需要对这些任务有个比较关系就可以了,可以这样比较:对于两个连续的部下x和y,考虑这两个部下的任务都完成所需要的时间T。我们假设先给部下x交待任务,则时间是Tx = Bx + max(Jx, By + Jy),假设先给部下y交待任务,则时间是Ty = By + max(Jy, Bx + Jx)。若Jx > Jy,则Ty = By + Bx + Jx,此时Ty > Bx + Jx,且Ty > By + Bx + Jy,也就是Ty > Bx +max(Jx, By + Jy) = Tx。因此应该先交待x任务。反之亦然。因此,贪心准则只需比较每个部下完成任务的时间J,根据J从大到小排序依次交待任务并完成即可。
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>#include <vector>#include <map>using namespace std;const int MAX = 1005;struct Job{ int b; int j;};int Case = 0;int n;Job job[MAX];bool cmp(Job j1, Job j2){ return j1.j > j2.j;}void input(){ for(int i = 0; i < n; i++) scanf("%d%d", &job[i].b, &job[i].j);}void solve(){ sort(job, job + n, cmp); int ans = 0, temp = 0; for(int i = 0; i < n; i++) { temp += job[i].b; ans = max(ans, temp + job[i].j); } printf("Case %d: %d\n", ++Case, ans);}int main(){ while(scanf("%d", &n) && n != 0) { input(); solve(); } return 0;}
0 0
- (uva 11729)突击战( Commando War)
- UVa 11729 Commando War 突击战
- UVa 11729 Commando War 突击战
- uva 11729 突击战 Commando War 思维
- 突击战(Commando War, UVa 11729)
- UVa 11729 Commando War 突击战(贪心)
- 贪心-突击战(Commando War, UVa 11729)
- 突击战(Commando War,UVA 11792)
- Commando War(突击战)
- UVa11729 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
- UVA 11729 Commando War
- VC6工程更名
- curl命令详解
- AppIcon中pt的百度百科解释
- [CF 86D] Powerful array · 莫队算法
- HDU 2795 Billboard 线段树 (单点更新,询问树最左节点是否可以容纳)
- UVa 11729 Commando War 突击战
- 算法小白总结(二)------递归调用
- Java中用Apache POI生成excel和word文档
- C++12.6 static 数据成员、static成员函数
- 初学JAVA之基本语句的使用
- Android--第四天(网络图片查看器,多线程下载,文件断点上传原理,Intent,Activity生命周期,广播,服务)
- swift入门第三章集合、控制流,标签语句
- Java Web开发模式一(JSP+JavaBean)
- Scrapy研究探索(七)——如何防止被ban之策略大集合