这是一个排序问题,要根据执行时间从到小排序。
- 执行时间越长,在执行时间内我能分配,执行更多任务。
- 执行时间相同时,最短与交代任务的时间长短排序方式无关。例如
3
4 5
3 5
2 5
这三组数据任意排序,最短时间始终是14
代码如下
#include <cstdio>
#include <algorithm>
using namespace std;
struct Man{
int b,j;
};
bool Comp(Man a,Man b)
{
return a.j>b.j;
}
int main()
{
int n,sum=0,now,Case=0;
Man m[10005];
while (~scanf ("%d",&n)&&n)
{
sum=0;
for (int i=0;i<n;i++)
scanf ("%d %d",&m[i].b,&m[i].j);
sort (m,m+n,Comp);
sum=m[0].b;
now=m[0].j;
for (int i=1;i<n;i++)
{
sum+=m[i].b;
if (m[i].b+m[i].j>=now)
now=m[i].j;
else
now=now-m[i].b;
}
sum+=now;
printf ("Case %d: %d\n",++Case,sum);
}
return 0;
}
/*
3
4 5
3 5
1 1
*/