题意:
n个任务,需要交代B分钟,执行J分钟,让你合理选择交代任务的次序,求得n个任务完成的最小总时长
思路:
为保证总时长最小,执行时长较大的应该先执行,所以每个按执行时长由大到小排序求得总时长。
代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct solder{
int b, j;
}s[1005];
int cmp(solder x, solder y){
if (x.j > y.j)
return 1;
return 0;
}
int main() {
int n,Case=1;
while (scanf("%d", &n) && n){
int i;
for (i = 0; i < n; i++)
scanf("%d%d", &s[i].b, &s[i].j);
sort(s, s + n,cmp);
int sum = 0,cnt=0;
for (i = 0; i < n; i++){
sum += s[i].b;
cnt = sum+s[i].j>cnt ? sum+s[i].j : cnt;
}
printf("Case %d: %d\n",Case,cnt);
Case++;
}
return 0;
}