uva 11729 Commando War

https://vjudge.net/problem/UVA-11729

题意:

你有n个部下,每个部下需要完成一个任务。第i个部下需要你花费bi分钟交代任务。然后他会立即花ji分钟无间断的,独立的执行任务。你需要选择交代顺序使得所有任务结束得尽可能早。不能同时向多名部下交代任务。

思路:

由于所有任务的执行是独立的,那么所花费的交代任务的时间就是不变的。所以想到把执行时间较长的任务尽量向前排,这样就可以使得执行时间较长的任务最早开始执行,所花费的时间就尽量少了。

代码:

 1 #include <stdio.h>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 struct node
 6 {
 7     int s,t;
 8 } a[1005];
 9 
10 int b[1005];
11 
12 bool cmp(node aa,node bb)
13 {
14     return aa.t > bb.t;
15 }
16 int main()
17 {
18     int n;
19 
20     int cas = 0;
21 
22     while (scanf("%d",&n) == 1)
23     {
24         if (n == 0) break;
25 
26         for (int i = 0;i < n;i++)
27             scanf("%d%d",&a[i].s,&a[i].t);
28 
29         sort(a,a+n,cmp);
30 
31         int cost = 0;
32 
33         for (int i = 0;i < n;i++)
34         {
35             cost += a[i].s;
36             b[i] = cost + a[i].t;
37         }
38 
39         sort(b,b+n);
40 
41         printf("Case %d: %d\n",++cas,b[n-1]);
42     }
43 
44     return 0;
45 }

 

posted @ 2017-09-20 09:29  qrfkickit  阅读(151)  评论(0编辑  收藏  举报