思路:
这道题是一个贪心算法,因为任意两个排在一起的工作,它们的时间相加都是b1+b2+max(j1,j2),所以要把时间最长的放在前面。
#include <iostream>
#include "bits/stdc++.h"
using namespace std;
struct Job{
int j,b;
bool operator < (const Job & x)const{
return j > x.j;
}
};
int main() {
int N;
int cnt = 0;
while(cin>>N && N)
{
cnt++;
vector<Job>jobs(N);
int ans = 0,s = 0;
for(int i = 0;i<N;i++)
{
cin>>jobs[i].b>>jobs[i].j;
}
sort(jobs.begin(),jobs.end());
for(int i = 0;i<N;i++)
{
s += jobs[i].b;
ans = max(ans,s+jobs[i].j);
}
cout<<"Case "<<cnt<<": "<<ans<<endl;
}
return 0;
}