hdu 4296

973 ワード

//欲張りで、w+sで並べ替えます。
//証明の詳細は以下の通りですhttp://www.cnblogs.com/liulangye/archive/2012/09/17/2689062.html 
//コードは以下の通りです
 
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
    int w,s;
}num[110000];
bool cmp(node a,node b)
{
    return (a.w+a.s)<(b.w+b.s);
}
int main()
{
    int n,i;
    __int64 Max,sum,tt;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
            scanf("%d%d",&num[i].w,&num[i].s);
        sort(num,num+n,cmp);
        Max=0;
        sum=num[0].w;
        for(i=1;i<n;i++)
        {
            tt=sum-num[i].s;
            if(tt>Max)
                Max=tt;
            sum+=num[i].w;
        }
        printf("%I64d
",Max); } return 0; }