0
点赞
收藏
分享

微信扫一扫

【UVA - 11729】Commando War (贪心,时间调度问题)

题干:(Uva不放题干了)

题目大意:(实在是自己懒得写网上找了一个)

【UVA - 11729】Commando War (贪心,时间调度问题)_i++

解题报告:

   调度问题,直接贪心出完成任务需要的时间最长的那个人排序,就行了。

方法正确性的证明以前也写过了,,这里就不再写了,,还是贴那篇题解中附的(这篇题解应该也是采用的交换证明法)。

【UVA - 11729】Commando War (贪心,时间调度问题)_#include_02

那篇题解

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
struct Node {
int a,b;
} node[MAX];
bool cmp(Node a,Node b) {
return a.b>b.b;
}
int n;
int main()
{
int iCase = 0;
while(~scanf("%d",&n)) {
if(n == 0) break;
for(int i = 1; i<=n; i++) scanf("%d%d",&node[i].a,&node[i].b);
int ans = 0,tmp=0;
sort(node+1,node+n+1,cmp);
for(int i = 1; i<=n; i++) {
tmp += node[i].a;
ans = max(ans,tmp + node[i].b);
}
printf("Case %d: %d\n",++iCase,ans);
}


return 0 ;
}

今天讲课学长说了一种贪心的证明思路貌似很正确啊。,先假设找到了一种最优解,然后看我们贪心的方法是否会改变这个最优解,如果改变不了,那么说明我们的方法一定是没有问题的。


举报

相关推荐

0 条评论