zoukankan      html  css  js  c++  java
  • BZOJ 1629. [Usaco2007 Demo]Cow Acrobats

    传送门

    感觉题意不太清楚 可能我英语不行

    每层只能有一头牛

    考虑对于任意一个方案,其中某个相邻位置 $i,i+1$,如果把它们交换会产生的贡献

    其他位置显然没有影响,这两个位置交换前为 $max(W-p[i+1],W+w[i+1]-p[i])$,交换后 $max(W-p[i],W+w[i]-p[i+1])$

    这样一直交换其实相当于按$max(-p[i+1],w[i+1]-p[i])$ 为关键字排序

    所以我们直接按 $max(-p[i+1],w[i+1]-p[i])$ 为关键字排序即可

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    using namespace std;
    typedef long long ll;
    inline int read()
    {
        int x=0,f=1; char ch=getchar();
        while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); }
        while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
        return x*f;
    }
    const int N=2e5+7;
    const ll INF=-1e19;
    int n;
    struct dat{
        int w,p;
        inline bool operator < (const dat &tmp) const {
            return max(-p,w-tmp.p)<max(-tmp.p,tmp.w-p);
        }
    }C[N];
    int main()
    {
        n=read();
        for(int i=1;i<=n;i++) C[i].w=read(),C[i].p=read();
        sort(C+1,C+n+1);
        ll now=0,ans=-INF;
        for(int i=1;i<=n;i++)
        {
            ans=max(ans,now-C[i].p);
            now+=C[i].w;
        }
        printf("%lld
    ",ans);
        return 0;
    }
  • 相关阅读:
    Flask——session
    UISB ScrollView
    UISB 登陆
    UISB TextField
    UISB 进步器 分栏控制器
    UISB UISlider ProgressView
    UISB Switch
    UISB 定时器
    Django-Celery文档
    UISB UIViewController
  • 原文地址:https://www.cnblogs.com/LLTYYC/p/11367995.html
Copyright © 2011-2022 走看看