brief introduction :
Each soilder needs to complete own task seperately,in other words his task did't depend on other soilder's help.
you ,as a commander,need to assign the task to each other , you have already know how much time it cost to assign and finish the task ,you need to calculate the minimum time it cost.
algorithm: The most important is to know that we must sum all assin time for each soilder. and we need to sort the finish time of the work from largest to smallest. and then we can calculate each soider's task finished time,and select the minimum one;
Here is the code:
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int plan,finish;
}soilder[2000];
int cmp(node a,node b){
return a.finish>b.finish;
}
int main(){
int n,sum,kase=0;
while(scanf("%d",&n)!=EOF){
kase++;
if(n==0)break;
for(int i=1;i<=n;i++)
scanf("%d%d",&soilder[i].plan,&soilder[i].finish);
sort(soilder+1,soilder+1+n,cmp);
sum=0;
int max=-1;
for(int i=1;i<=n;i++){
sum+=soilder[i].plan; //sum all the soilders assign time is nessary
int temp=sum+soilder[i].finish; //calculate finished time of each soilder
if(max<temp)max=temp; //
}
printf("Case %d: %d\n",kase,max);
}
return 0;
}