首页 > 其他分享 >AcWing 125. 耍杂技的牛

AcWing 125. 耍杂技的牛

时间:2024-09-18 22:01:48浏览次数:7  
标签:... 杂技 cow int sum 交换 125 AcWing 贪心

算法1

(贪心)

题目要求牛的最大伤害值最小,那么我们使每头牛的伤害值最小,在其中找最大值作为答案

如何使得每头牛的伤害值最小?

(1) 自身w值越大应该放到底部,使得被减数减小

(2) 自身s值越大应该放到底部,使得减数变大

综上,w + s 从小到大排序,最大的危险系数一定是最小的。

贪心算法的证明过程:

贪心所得到的解 == 最优解

(1)贪心所得到的解 >= 最优解

由于最终答案所有可行方案中的最大值,而用贪心得到的解是一个可行解,因此最优解一定大于贪心得到的解

(2)贪心得到的解 <= 最优解

假设最优解不是 w + s从小到达排序的,那么必然存在相邻两头牛,使得 $w_i$ + $s_i$ > $w_i+1$ + $si+1$

交换前的伤害值:

第i个位置上的牛:$ w_1 + w_2 + ... + w_~i-1 - s_i $

第i+1个位置上的牛:$ w_1 + w_2 + ... + w_i-1 + w_i - s_~ i + 1$

交换后的伤害值:

第i个位置上的牛:$ w_1 + w_2 + ... + w_~i-1 - s_~i+1 $

第i+1个位置上的牛:$ w_1 + w_2 + ... + w_~i-1 + w_i+1 - s_i$

由于交换前和交换后的式子当中都有$w_1 + w_2 + ... + w_i-1$,因此我们可以同时去掉他

再加上$s_i + s_i+1$

去掉w[1] + ...+w[i-1]之后:

         第i个位置上的牛      第i+1个位置上的牛
         
交换前: -s[i]                w[i] - s[i + 1]

交换后: -s[i + 1]            w[i+1] - s[i]

----------
加上(s[i] + s[i+1])之后:

         第i个位置上的牛     第i+1个位置上的牛
         
交换前: s[i+1]               w[i]+s[i]

交换后: s[i]                 w[i+1]+s[i+1]

从上面的式子当中可以看出,$w_i + s_i > s_i$

又我们再前面假设当中 $w_i$ + $s_i$ > $w_i+1$ + $si+1$

因此,我们可以得出 (交换前)$s_i+1 + w_i + s_i $ 大于(交换后) $s_i + w_i+1 + s_i+1$

也就是说,交换后的值,严格变小了, 此时我们可以证明出贪心得到的值 <= 最优值

证毕!

C++ 代码

#include <bits/stdc++.h>
using namespace std;

typedef pair<int,int>PII;
const int N = 50010;

int n;
PII cow[N];

int main(){
    scanf("%d",&n);
    for(int i = 0 ; i < n; i++){
        int w,s;
        scanf("%d%d",&w,&s);
        cow[i] = {w + s, w};   
    }
    
    //按照 w + s 从小到大进行排序
    sort(cow, cow + n);
    
    int ans = -2e9, sum = 0;   //sum表示当前我头上的牛的重量
    for(int i = 0; i < n; i ++){
        int w = cow[i].second, s = cow[i].first - w;  //当前牛的强壮值
        ans = max(ans, sum - s); //我头上的牛的总重量 - 我的强壮值
        sum += w;
    }
    printf("%d",ans);
    return 0;
}

标签:...,杂技,cow,int,sum,交换,125,AcWing,贪心
From: https://www.cnblogs.com/ltphy-/p/18419425

相关文章

  • 【每日刷题】Day125
    【每日刷题】Day125......
  • Springboot在线问卷调查系统-计算机毕业设计源码12500
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了在线问卷调查系统的开发全过程。通过分析在线问卷调查系统管理的不足,创建了一个计算机管理在线问卷调查系统的方案。文章介绍了在线问卷调查系统的系统分析部分,包括可行性分......
  • GYM 105125 C
    题目描述给定\(NM\)个数\(A_1,A_2,\dots,A_{NM}\),你要将这些数分成\(N\)个数组,每个数组\(M\)个数。接着你要将这些数组按字典序排序。对于排序后每个数组求出可能的字典序最小情况。思路我们从字典序的比较上来考虑,并把\(A\)排序。首先考虑当前数组\(i\)的第一位......
  • 今日打卡:洛谷:P1248 加工生产调度/P1251 餐巾计划问题
    昨天虽然打了卡,但是因为时间问题,所以没做题,今天补回来。今天的运势也真服了,我今天没出过门,也不会装逼啊!还有,我不开电脑怎么做题啊?请教问题也找不到人啊!P1248加工生产调度:#include<bits/stdc++.h>usingnamespacestd;structnumber{ intnum,ind; boolsign; boolo......
  • 【AcWing】866~868. 质数
    #include<iostream>#include<math.h>usingnamespacestd;intn;boolis_prime(intx){if(x<2)returnfalse;for(inti=2;i<=x/i;i++){if(x%i==0)returnfalse;}returntrue;}intmain(){cin>>n;......
  • 第125期 饮料废弃物数据集
    引言亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。饮料废弃物分类数据集及其应用探索一、背景在当今社会,随着城市化进程的加速和人们......
  • 【FMC129】基于VITA57.1标准的JESD204B接口8通道125MSPS 16位AD采集子卡模块
     板卡概述       FMC129是一款8通道125MHz采样率16位AD采集FMC子卡,符合VITA57.1规范,可以作为一个理想的IO模块耦合至FPGA前端,8通道AD通过高带宽的FMC连接器(HPC)连接至FPGA从而大大降低了系统信号延迟。       该板卡支持板上可编程采样时钟和外部参考时钟以及......
  • AcWing852.spfa判断负环
    cnt数组表示:cnt【j】表示边j#include<iostream>#include<cstring>#include<algorithm>#include<queue>#defineN2010#defineM10010usingnamespacestd;intn,m;inth[N],w[M],e[M],ne[M],idx;intdis[N],cnt[N];boolst[N];voidadd(inta,i......
  • AcWing854. Floyd求最短路
    注意:Floyd是求图里面任意两个点x,y之间的最短距离#include<cstring>#include<iostream>#include<algorithm>usingnamespacestd;constintN=210,INF=1e9;intn,m,Q;intd[N][N];voidfloyd(){//枚举1~k个中间节点,尝试通过这几个点中转来达到更短......
  • AcWing 1078. 旅游规划 (DFS找树的直径+直径中点性质求解,无DP)
    原题链接题目描述算法引用自树的直径-OI-Wiki:若树上所有边边权均为正,则树的所有直径中点重合证明:使用反证法。设两条中点不重合的直径分别为\(\delta(s,t)与\delta(s',t')\),中点分别为\(x\)与\(x'\)。显然,\(\delta(s,x)=\delta(x,t)=\delta(s',x')=\delta(......