挺简单的贪心。
直觉告诉我直接从时间长的任务开始交代就好了。
可是总觉得怪怪的。
直接敲了代码上去就AC了。
然后看了看书发现思路没错:)
#include<iostream>
using namespace std;
const int MAXN=1000+10;
int B[MAXN],J[MAXN];
int main()
{
int n,i,sum,count=1;
while(cin>>n,n)
{
for(i=0;i<n;i++)
cin>>B[i]>>J[i];
int max,k,temp;
for(i=0;i<n;i++)
{
max=i;
for(k=i+1;k<n;k++)
if(J[k]>J[max])
max=k;
if(k!=i)
{
temp=B[i];B[i]=B[max];B[max]=temp;
temp=J[i];J[i]=J[max];J[max]=temp;
}
}
max=B[0]+J[0];
temp=B[0];
for(i=1;i<n;i++)
{
if(temp+B[i]+J[i]>max)
max=temp+B[i]+J[i];
temp+=B[i];
}
cout<<"Case "<<count++<<": "<<max<<endl;
}
}