突击战(Commando War,UVa 11729)

  你有n个部下,每个部下需要完成一项任务。第i个部下需要你花Bi分钟交待任务,然后他会立刻独立地、无间断地执行Ji分钟后完成任务。你需要选择交待任务的顺序,使得所有任务尽早执行完毕(即最后一个执行完的任务尽早结束)。注意,不能同时给两部下交待任务,但部下们可以同时执行他们各个的任务。

【输入格式】

  输入包含多组数据,每组数据的第一行为部下的个数,N(1<=N<=1000);以下N行每行两个整数B和J(1<= B <= 1000, 1<= J <= 1000),即交待任务的时间。输入结束标志为N=0。

【输出格式】

  对于每组数据,输出每组任务完成的最短时间。

【样例输入】
    3
    2 5
    3 2
    2 1
    3
    3 3
    4 4
    5 5
    0
【样例输出】
    Case 1: 8
    Case 2:15

 代码如下

 #include <cstdio>#include <vector>

#include <algorithm>

using namespace std;

//定义一个士兵结构体 struct Job{ int j;  //完成任务花的时间 int b;  //交待任务花的时间
 bool operator < (const Job& x) const{   //操作符重载,后面使用sort时使用 return j > x.j; } }; int main(){ int n, b, j, kcase = 1; Job job; while(scant("%d", &n) == 1 && n){ vector<Job> v; for(int i=0; i<n; i++){ scanf("%d%d", &j, &b); job.j = j; job.b = b; v.push_back(job); } sort(v.begin(), v.end()); 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", kcase, ans); } return 0; }

 执行过程

4 7
4 5
6 2

0:s = 4, ans = max(0, 4+7) = 11
1: s = 4 + 4 = 8, ans = max(11, 8+5) = 13
2: s = 8 + 6 = 14, ans = max(13, 14 + 2 = 16) = 16;

 

posted @ 2014-11-16 17:10  树下的枫  阅读(495)  评论(0编辑  收藏  举报