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 ",++cas,b[n-1]); 42 } 43 44 return 0; 45 }