UVA 11729 Commando War

2014-11-23 21:38:17 · 作者: · 浏览: 8
根据任务时间从大到小排序,保存当前士兵以后能够和其他人共同进行的时间。求出差的最大值,加上交代每个士兵任务这个必须时间就是答案。
 
#include  
#include  
#include  
#include  
using namespace std;  
struct node{int x,y;}man[1005];  
int last[1005];  
bool cmp(const node &a,const node &b)  
{  
    return a.y>b.y;  
}  
int main()  
{  
    int n;  
    int cas=1;  
    while(scanf("%d",&n)&&n)  
    {  
        int ans=0;  
        int sum=0;  
        last[n]=0;  
        for(int i=1;i<=n;i++)  
        {  
            scanf("%d%d",&man[i].x,&man[i].y);  
            sum+=man[i].x;  
        }  
        sort(man+1,man+1+n,cmp);  
        for(int i=n-1;i>
=1;i--) { last[i]=last[i+1]+man[i+1].x; } for(int i=1;i<=n;i++) { if(man[i].y>last[i]) ans=max(ans,man[i].y-last[i]); } printf("Case %d: %d\n",cas++,ans+sum); } return 0; }