• p1842 奶牛玩杂技 题解


    感觉其他dalao讲的不是很明白啊,我这样的蒟蒻看不懂啊.
    在luogu这个dalao遍地的地方我蒟蒻看个题解也不明白,我为跟我同病相怜的蒟蒻写一篇吧

    其实真是不太明白,大部分题解都是只说

    体重大的在下面

    力量大的在下面

    (和)

    没有证明啊....


    设wa + sa > wb + sb且a与b相邻

    a在上面,b在下面时

    那么a和b上面的牛总重为w

    a的压扁指数为w - sa
    b为w + wa - sb

    因为wa + sa > wb + sb

    那么wa - sb > wb - sa

    因为wb >= 0,所以wa - sb > - sa

    所以w + (wa - sb) > w - (sa),所以当a在上时,总压扁指数为w + wa - sb(不考虑上面的牛的压扁指数)

    b在上面,a在下面时

    a -> w + wb - sa

    b -> w - sb

    因为wa + sa > wb + sb

    所以wb - sa < wa - sb

    又因为wa > 0

    所以wb - sa < -sb

    所以w + (wb - sa) < w + (-sb),所以当b在上时,总压扁指数为w - sb(不考虑上面的牛的压扁指数)

    综上

    当a在上时w + wa - sb

    b在上时 w - sb

    所以力量加体重大(w + s 大)的在下面比在上面更优

    如果考虑上面的牛的话.

    若上面牛的总压扁指数比a和b的大,那么交换了也不会变差(即无所谓).

    如果不如a和b的大的话,就成了我说的这种情况

    #include<bits/stdc++.h>
    
    #define AC 0
    
    using namespace std;
    
    inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();return s*w;}
    
    struct po
    {
    	int w,s;
    };
    po a[50001];
    
    bool cmp(po a,po b){
    	return a.w + a.s < b.w + b.s;
    }
    
    int main(int argc, char const *argv[])
    {
    	int n;
    	cin>>n;
    	for(int i = 1;i <= n;++i){
    		a[i].w = read();
    		a[i].s = read();
    	}
    	sort(a + 1,a + 1 + n,cmp);//贪心排序
    	int tot = 0,ans = -99999999;//一个数减另一个数,不排除负数的可能,ans要弄负值
    	for(int i = 1;i <= n;++i){
    		ans = max(ans,tot - a[i].s);
    		tot += a[i].w;
    	}
    	cout<<ans<<endl;
    	return AC;
    }
    

    给像我一样的蒟蒻的题解,dalao勿喷

  • 相关阅读:
    awk 入门教程【转】
    xargs 命令教程【转】
    redis 执行lua脚本
    SpringMVC 执行过程分析
    EurekaClient 服务注册、发现、续约
    Springboot 自动配置 & 自定义Starter
    Netty 实现HttpServer
    Spring中@Import 用法
    Netty自定义任务&Future-Listener机制
    Springboot + Netty + WebSocket 实现简单的聊天
  • 原文地址:https://www.cnblogs.com/lztzs/p/11637429.html
Copyright © 2020-2023  润新知