zoukankan      html  css  js  c++  java
  • 洛谷 1842 [USACO05NOV]奶牛玩杂技【贪心】

    【题意】

      有N只奶牛,要摞在一起。

      每只奶牛有重量wi和体力值si

      每只奶牛的压扁值为它上面的奶牛的重量w之和-它自己的体力值si

      使最大的压扁值最小。

    【题解】

      贪心,构造排序的compare函数即可。

      假设有两只相邻的奶牛i和j,

      i在j上的总压扁值是 max( a+Wi-Sj, a-Si), 其中a是他们上面的奶牛的质量。

      j在i上的总压扁值是 max( a+Wj-Si, a-Sj).

      比较这两个值的大小来决定i, j的上下关系即可。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define LL long long
    #define N 500010
    using namespace std;
    
    int n;
    LL ans=-2e9,sum;
    struct rec{
        int w,s;
    }a[N];
    
    inline int read(){
        int k=0,f=1; char c=getchar();
        while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
        while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar();
        return k*f;
    }
    
    inline bool cmp(rec x,rec y){
        int xabove=max(x.w-y.s,-x.s);
        int yabove=max(y.w-x.s,-y.s);
        return xabove<yabove;
    }
    int main(){
        n=read();
        for(int i=0;i<n;i++) a[i].w=read(), a[i].s=read();
        sort(a,a+n,cmp);
        for(int i=0;i<n;i++){
            ans=max(ans, sum-a[i].s);
            sum+=a[i].w;
        }
        printf("%lld
    ",ans);
        return 0;
    }
    

      

  • 相关阅读:
    内核模块的一些问题
    [转]change the linux startup logo
    raspbian 静态IP
    [转]centos7 配置yum源(本地+光盘)
    [转]source inslght使用指导
    T420修改wifi灯闪动模式
    root运行chrome
    [转]理解阻塞非阻塞与同步异步
    [转] 计算机体系架构分类
    Win7下安装 Oracle Virtual Box
  • 原文地址:https://www.cnblogs.com/DriverLao/p/13138085.html
Copyright © 2011-2022 走看看