题目链接:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=2829
题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=2829
//分析:直觉告诉我们,执行时间较长的任务应该先交代。(证明?)。。贪心算法。
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct Job {
int j, b;
bool operator < (const Job& x) const {
return j > x.j;
}
};
int main() {
int n, b, j, kase = 1;
while (scanf("%d", &n) == 1 && n) {
vector<Job> v;
for (int i = 0; i < n; i++) {
scanf("%d%d", &b, &j); v.push_back((Job){j,b});
}
sort(v.begin(), v.end());//使用Job类自己的 < 运算符排序
int s = 0;
int ans = 0;
for (int i = 0; i < n; i++) {
s += v[i].b;
ans = max(ans, s + v[i].j);
}
printf("Case %d: %d\n",kase++, ans);
}
return 0;
}
题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=2829