https://vjudge.net/contest/285413#problem/D
贪心算法,先排序,让j最大的人先开始,然后用两个数组,一个start,用来存储每个人开始工作的时间,即被通知任务的时间,一个end,用来存储工作完成的时间,最后end数组里最大的值即为所求。
其中,start[i]=start[i-1]+b[i],end[i]=start[i]+j[i]
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdlib>
using namespace std;
struct person{
int b;
int j;
}persons[1010];
bool cmp(person a,person b){
return a.j>b.j;
}
int start[1010];
int endd[1010];
int main(){
int n;
int k=0;
while(cin>>n){
if(n==0){
break;
}
int b,j;
for(int i=0;i<n;i++){
cin>>persons[i].b>>persons[i].j;
}
sort(persons,persons+n,cmp);
for(int i=0;i<n;i++){
if(i==0){
start[i]=persons[i].b;
}
else{
start[i]=start[i-1]+persons[i].b;
}
endd[i]=start[i]+persons[i].j;
}
sort(endd,endd+n);
cout<<"Case "<<++k<<": "<<endd[n-1]<<endl;
}
return 0;
}