BZOJ-1629: [Usaco2007 Demo]Cow Acrobats

[文章目录]

Description

给你n头牛,每个牛有一个力量和一个体重,他们玩叠罗汉,牛的危险值等于它上面所有牛的体重之和-自身力量。n<=50000

感性理解:体重大的往下放,力量大的也往下放。所以按和排序。
其实可以证明一下,考虑交换两头牛,发现并不比原来的解优。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int n;
struct node
{
    int a,b;
}a[51000];
bool cmp(node x,node y) {return x.a+x.b<y.a+y.b;}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&a[i].a,&a[i].b);
    sort(a+1,a+n+1,cmp);
    ll mx=-1000000000,sum=0;
    for(int i=1;i<=n;i++)
    {
        mx=max(mx,sum-a[i].b);
        sum+=a[i].a;
    }
    printf("%lld",mx);
    return 0;
}

发表评论

邮箱地址不会被公开。 必填项已用*标注