题意:
现在有n个士兵,你要给n个士兵布置任务;第i个士兵要花bi时间给他布置任务,并且他要花ji时间去完成任务.你一次只能给一个士兵布置任务.但是布置任务的时候,其他士兵可以在做任务,并且可以同时在做任务;问布置任务加完成任务的时间最少是多少;
思路:
首先可以知道,完成任务时间最长的士兵肯定是先布置任务(这样就能同时做更多事),所以将士兵按任务完成时间从大到小排序,然后算出这个时间就行了.
算时间就是看看这个任务布置完,所有要花的时间是多少,和之前的比较,更新最大值;
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1005;
struct soil {
int B;
int J;
}s[N];
int n;
int cmp(soil a , soil b) {
return a.J > b.J;
}
int main () {
int cas = 1;
while(scanf("%d",&n) && n) {
for(int i = 0 ; i < n ; i++) {
scanf("%d%d",&s[i].B , &s[i].J);
}
sort(s , s + n , cmp);
int total = 0;
int t = 0;
int temp;
for(int i = 0 ; i < n ; i++) {
temp = 0;
t += s[i].B;
if(t + s[i].J > total)
total = t + s[i].J;
}
printf("Case %d: %d\n",cas++ , total);
}
}