临项交换法在贪心算法中的应用
1.排序不等式的证明
我们给出一个高中常见的排序不等式:
对 且 ,
设是数列的一个随机排列,
那么有如下不等式成立:
即 逆序和 乱序和 顺序和
其证明可以通过 临项交换法 进行:
对于顺序和,随机挑选两项进行交换,即将交换为。
那么
可以说明对于顺序和,任意选择两项进行交换都不会使得值更大
将其进行推广,可以得出顺序和最大
同理,对于逆序和,任意选择两项交换都不会使得值更小,推广后得到逆序和最小
这样我们便证明了上述结论
上述证明的核心在于 临项交换法:对一个按某种顺序排列的序列,证明任意两项交换后都不会使得答案更优,则该顺序排列是最优解,或者说,当两项按某种顺序排列后最优,大概率可以推广到项。这种方法常常用于以排序为基础的贪心题的证明。
2.临项交换在贪心法中的应用——NOIP2012 国王游戏
本来这个题目是蓝题的,结果因为太经典,做的人太多,已经变成绿题了就离谱
思路
记皇帝是第0个人,第个人所得金币数量为,那么有
我们的目标是使得最小
临项交换:我们先按某种方式进行排序,随后随意抽取相邻两项尝试交换。
原本答案为
交换后变为
那么我们比较一下和的大小即可
约去公因式,即比较和即可
当时,此时不会大于,无需交换,否则交换后可以使答案不会变差(甚至变优)
那么我们就得到了一个排序思路:以作为排序依据,从小到大排序即可
代码
略,洛谷题解挺多的了(这题好像还要写一下高精度才能完全AC)
补充题目
可以看下我前面写的博客
临项交换法:把个数字按照字符串读入,按某一顺序排列,尝试将相邻两项进行交换,可以发现当(注意,这里时按照字符串方式进行加减,类似于拼接,而不是算术加法)时无需交换,反之交换后可以使得答案更优。代码如下:
__EOF__

本文作者:cyhforlight
本文链接:https://www.cnblogs.com/cyhforlight/p/14176308.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cyhforlight/p/14176308.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话