题意:你有n个部下,每个部下需要完成一项任务。第i个部下需要你花 Bi 分钟交待任务,然后他会立刻独立地、无间断的执行 Ji 分钟后完成任务。你需要选择交待任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务应尽早结束)。注意,不能同时给两个部下交待任务,但部下们可以同时执行他们各自的任务。(本段摘自《算法竞赛入门经典(训练指南)》)
分析:
直接按
Ji
从大到小排序就好了。
代码
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <string>
using namespace std;
const int maxn = 1000 + 5, INF = 2000005;
struct Node
{
int b, j;
bool operator < (const Node& right) const
{
return j > right.j;
}
};
int n, ans, pos, C;
Node a[maxn];
int main()
{
while (~scanf("%d", &n), n)
{
pos = 0;
ans = 0;
for (int i = 0; i < n; ++i)
scanf("%d%d", &a[i].b, &a[i].j);
sort(a, a + n);
for (int i = 0; i < n; ++i)
{
ans = max(ans, pos + a[i].b + a[i].j);
pos += a[i].b;
}
printf("Case %d: %d\n", ++C, ans);
}
return 0;
}