鉴于tarde这道题正解过于好写,导致我对这个诡异的贪心的正确性产生了疑问,所以花了2h的时间与同机房神犇M-Blanca,Midoria7,goote~进行讨论,最后与goote~犇犇各得出了一个正确性证明:

  1. 贪心算法步步最优的证明:

    新加入一个值k,它能对前面产生的贡献就是:
  • 如果前面的某个值j是商品卖出的地方,我们可以撤销这次卖出(j-i),并从新加入的地方卖出(k-i),答案增加了(k-j)。
  • 如果前面某个值j是不买不卖的地方,我们可能的贡献是k-j(在j买入,k卖出)。
  • 所以新加入的这个k对前面的最大贡献就是在1~k-1中找一个比他小的最小的j(j是卖出的地方或者是不买不卖的地方)。然后加上贡献k-j。
  • 如果要求合法的加贡献的方式,其实也就这两种,如果要求一个本来是卖出的点就j强行买入并在k卖出,那么原来的j-i的贡献消失,加上k-j的贡献,是不如直接“撤销j”,直接加上k-j的贡献来的优的。
  • 而加入小根堆中的数只会是可撤销的或是不买不卖的,所以自动就维护出最小了,直接转移一定是最优解。

2.步步最优推向全局最优:

我们注意到,对于一种最优情况,在它后面再加入一个新数产生贡献的时候,产生的最大贡献根据上面是一定的。对于1~k-1的划分方式,我们根据上面的贪心算法,买~卖关系已经是一定的了,但是我们想到对于一个不那么优的买~卖关系划分方式,可能加贡献加的更多(因为有可能有一些较小的点由卖出的变成了不买不卖的了,从而使新加的值减去他贡献更大),这样的答案会更优吗(即经典的贪心局部最优是否是全局最优)。

  • 根据goote犇犇的说法:切换成非最优分配方式会使减数不变或增大而导致不会出现更优解。

什么意思呢?

就是每一种分配方式的答案一定是这里面的卖出的点的值的和作为被减数,买入的点的值的和作为减数,然后这样一减出答案。

而局部最优解中一定是能保证该区间内被减数-减数的值是最大的。

如果切换配对方式,那么可能有的买入点变成了卖出点,而卖出点反而变成了买入点,这样会导致被减数减小,而减数增大(因为之前满足最优,那一定是被减数-减数结果最大的情况),然后这时候我们新加一个点k。

  • 如果k足够大,就把k放进被减数的集合里,这时候在前面找一个数j与他匹配,j加入减数集合。这时候,j要么是最优解减数集合中的一个减数,要么是比最优解减数集合中的任何一个减数都大,(这个最优解一定会囊括所有的小减数,所以可以认为最优解集合中的减数是所有可能中最小的),根据刚才的结果,我们得出较劣解转移过来的减数集合是不会比最优解转移过来的减数集合小的,而被减数集合较劣解也不会比最优解大,所以最后的答案较劣解是不可能大于最优解的。
  • 如果k很小,那根本没法把他放进被减数集合里,那当前答案没有被更新,显然最优解也是更优的。

    综上所述,局部最优解转移过来的还是最优的,那么就是全局最优辣!

trade可撤销贪心正确性证明的更多相关文章

  1. 种花 [JZOJ4726] [可撤销贪心]

    Description 经过三十多个小时的长途跋涉,小Z和小D终于到了NOI现场——南山南中学.一进校园,小D就被花所吸引了(不要问我为什么),遍和一旁的种花园丁交(J)流(L)了起来. 他发现花的摆 ...

  2. SGU 280.Trade centers(贪心)

    SGU 280.Trade centers 解题报告 题意: n(<=30000)个城市,(n-1)条道路,求最少需要选择多少个城市建造市场,使得所有城市到任意一个市场的距离不大于k. Solu ...

  3. HDU 1009 FatMouse' Trade(简单贪心 物品可分割的背包问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1009 FatMouse' Trade Time Limit: 2000/1000 MS (Java/O ...

  4. 带撤销贪心——cf1148F好题

    自己不会做,看了题解懂得 从最高位依次往低位遍历,因为偶数个1是不改变符号的,所以带个贪心即可(可以看成是带撤销的..) 每轮循环用sum记录该位选择1可以减少的值 如果是负数,就不要改成1 如果是正 ...

  5. HDU 1009 FatMouse' Trade(简单贪心)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1009 FatMouse' Trade Time Limit: 2000/1000 MS (Java/O ...

  6. bzoj4278[ONTAK2015]Tasowanie & bzoj1692[USACO 2007Dec]队列变换(Best Cow Line) 贪心正确性证明

    做法网上到处都有就不说了. 这题其实是之前做的….不过由于人太傻现在才想明白比较字典序进行贪心的正确性…. 方便起见,在两个串的最右端都加上很大但不相同的字符,避免第lcp+1个字符不存在的边界. 如 ...

  7. HDU 1009:FatMouse&#39; Trade(简单贪心)

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. [CSP-S模拟测试]:trade(反悔贪心)

    题目传送门(内部题62) 输入格式 第一行有一个整数$n$.第二行有$N$个整数:$a_1\ a_2\ a_3\cdot\cdot\cdot a_n$. 输出格式 一行一个整数表示最大收益. 样例 样 ...

  9. 模拟费用流 & 可撤销贪心

    1. CF730I Olympiad in Programming and Sports 大意: $n$个人, 第$i$个人编程能力$a_i$, 运动能力$b_i$, 要选出$p$个组成编程队, $s ...

随机推荐

  1. pytorch常用函数总结(持续更新)

    pytorch常用函数总结(持续更新) torch.max(input,dim) 求取指定维度上的最大值,,返回输入张量给定维度上每行的最大值,并同时返回每个最大值的位置索引.比如: demo.sha ...

  2. 2020年 .NET ORM 完整比较、助力选择

    .NET ORM 前言 为什么要写这篇文章? 希望针对 SEO 优化搜索引擎,让更多中国人知道并且使用.目前百度搜索 .NET ORM 全是 sqlsugar,我个人是无语的,每每一个人进群第一件事就 ...

  3. CTF-WeChall-第三天下午

    2020.09.11 哈哈哈,中午改了博客背景,添加了背景音乐,verygood,有种小窝的感觉了,下午继续努力 做题 第一题 Shadowlamb - Chapter I 题目地址 Ugah做游戏. ...

  4. python判断链表是否有环

    思路:使用快慢指针,快指针每次走两步,慢指针每次走一步,如果有环,则一定会快慢指针指向同一结点: 假设环的长度为n,先让一个指针走n步,另一个再开始走,当他们指针指向同一结点时,该结点就是环入口点 ( ...

  5. Linux 命令: sed

    sed -- sed 命令对于Linux系统来说,在命令行修改,操作文本是非常的方便. 特别是批量的修改某些字符等,是非常省时省力的,非常适合在自动化的脚本中去应用. 如下的几个小例子: 1)如何删除 ...

  6. Linux基本目录机构

    Linux基本目录机构 1. 基本介绍 Linux的文件系统采用级层式子的树状目录结构 最上层是根目录"/" Linux世界里,一切皆文件 2. 目录用途 /bin: 是Binar ...

  7. 报错: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))

    你没打开 1.双击打开 2.点击:

  8. cookie、session和md5加密

    cookie Http无状态协议,只能在同一个网站(包括多个页面)下获取,存储在客户端本地的一段信息,帮助我们存储信息获取信息.但是同样有风险:我们自己在浏览器上可以操作或者设置Cookie. con ...

  9. 微信小程序-简介

    微信小程序定位 1. 不需要下载安装即可使用 2. 用户用完即走,不用关系是否安装太多应用 3. 应用无处不在,随时可用 # 不要安装可使用是个伪命题,因为小程序的安装包小于1M,下载安装到使用的过程 ...

  10. 数论(8):min_25 筛(扩展埃氏筛)

    min_25 筛介绍 我们考虑这样一个问题. \[ans=\sum_{i = 1}^nf(i)\\ \] 其中 \(1 \le n \le 10^{10}\) 其中 \(f(i)\) 是一个奇怪的函数 ...