/*
题意:你有n个部下需要交代任务,每个部下,需要
b时间交代任务,j时间执行任务,你需要控制交代
任务的顺序,以求最少结束任务时间。
贪心、排序
*/
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N = 1005;
struct job
{
int b;
int j;
}m[N];
bool cmp(job x,job y)
{
return x.j > y.j;
}
int main()
{
int n;
int t = 0;
while(~scanf("%d",&n)&&n)
{
for(int i = 0;i < n;i++)
scanf("%d%d",&m[i].b,&m[i].j);
sort(m,m+n,cmp);
int sum = 0,ans = 0;
//这里的时间使用一个不断增加的常数控制的
for(int i = 0;i < n;i++)
{
ans += m[i].b;//每次结束交代任务的时间,开始执行任务,交代任务不能同时进行
sum = max(sum, ans+m[i].j);//更新任务执行的最短时间
//感觉这里有点难懂,
}
printf("Case %d: %d\n",++t,sum);
}
return 0;
}
UVA-11729 - Commando War(贪心、排序)
最新推荐文章于 2018-07-07 09:55:06 发布