您的位置:首页 > 其它

UVA 11729 - Commando War

2013-03-23 12:06 337 查看
贪心

首先按执行时间排序,然后维护一个变量maxJobTimeLeft,表示最大的任务剩余时间,累加所有的分配时间,再加上最后的最大任务剩余时间就是答案

#include <iostream>
#include <memory.h>
#include <algorithm>
#include <cstdio>
using namespace std;
#define MAX 1010

struct node
{
int b,j;
bool operator<(const node & rhs)const{
return j>rhs.j;
}
}soldiers[MAX];
int n;
int main(){
int cas=1;
while (scanf("%d",&n)&&n)
{
int cost=0,maxJobTimeLeft=0;
for(int i=0;i<n;++i)scanf("%d %d",&soldiers[i].b,&soldiers[i].j);
sort(soldiers,soldiers+n);
for (int i=0;i<n;++i)
{
cost+=soldiers[i].b;
maxJobTimeLeft-=soldiers[i].b;
if(soldiers[i].j>maxJobTimeLeft)maxJobTimeLeft=soldiers[i].j;
}
printf("Case %d: %d\n",cas++,cost+maxJobTimeLeft);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: