Commando War(UVa 11729)贪心算法
来源:互联网 发布:淘宝如何批量上传宝贝 编辑:程序博客网 时间:2024/05/16 13:51
来自《算法竞赛入门经典训练指南》
1.题目原文
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2829
你有n个任务需要交代部下,每个部下独立完成一个任务,第i个部下需要花时间B[i]交代任务,然后他独立无间断的执行J[i]时间完成任务。安排交代任务的顺序,是所有任务尽早执行完毕。
2.解题思路
直觉告诉我们,执行时间较长的应该提前交代任务。由此可以得到一个贪心算法。
下面是详细证明:
假设我们交换两个相邻的任务X和Y(交换前X在Y之前,交换后Y在X之前),不难发现其他任务的完成时间并没有影响。
情况一:交换之前,Y比X先结束,不难发现,交换之后X的时间延后,Y的时间提前,最终答案不会变好。
情况二:交换之前,X比Y先结束,交换后答案不会变好的充要条件是X的结束时间不比交换前Y的结束时间早,即B[X]+B[Y]+J[Y]>=B[X]+B[Y]+J[Y],化简得J[X]>=J[Y]。这就是我们贪心的依据。
3.AC代码
/*#include <algorithm>#include <cctype>#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <string>#include <set>#include <vector>#include<cmath>#include<bitset>#include<sstream>using namespace std;*/#include<bits/stdc++.h>//这个包含所有的头文件using namespace std;#define INF 0x7fffffffstruct Job{ int j,b; bool operator < (const Job& x) const{ return j>x.j; }};int main(){ int kase=1; int n,b,j; while(scanf("%d",&n)!=EOF&&n){ vector<Job> vec; for(int i=0;i<n;i++){ scanf("%d%d",&b,&j); vec.push_back((Job){j,b}); } sort(vec.begin(),vec.end()); int s=0; int ans=0; for(int i=0;i<n;i++){ s+=vec[i].b;//当前任务开始的执行时间 ans=max(ans,s+vec[i].j);//更新任务执行完毕的最晚时间 } printf("Case %d: %d\n",kase++,ans); } return 0;}
0 0
- uva 11729 Commando War(贪心算法)
- Commando War(UVa 11729)贪心算法
- 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 Commando War 11729 (贪心)
- UVa 11729 - Commando War(贪心)
- Uva 11729 Commando War【贪心】
- UVA 11729 Commando War(贪心)
- |UVA 11729|贪心|Commando War
- Commando War-uva 贪心
- uva 11729 Commando War(贪心)
- UVA 11729(Commando War-按执行时间贪心)
- Java String.split() 总结
- ICON资源的使用
- JDBC的事务处理
- [kuangbin带你飞]专题一 简单搜索 Find The Multiple :dfs
- 远程返回字符串,本地等级图片的显示
- Commando War(UVa 11729)贪心算法
- Leetcode 416. Partition Equal Subset Sum
- ubuntu VMtools安装方法
- 如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀, 问你如何才能准确称出4公升的水?(40秒-3分钟)
- 面向对象的三大特性总结
- 动态改变窗口图标的方法 WM_SETICON消息
- jdk高版本编译低版本jar导致的运行错误.md
- LCA求法的三度升级
- 你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。 抓取多少个就可以确定你肯定有两个同一颜色的果冻?(5秒-1分钟)