[学习笔记]贪心
貪心是一個考察智商的算法。
也是一個考察猜結論能力,證明能力的算法。
和DP類似,貪心也有一個前提,問題必須有最優子結構。
?
一、經典模型:
①硬幣問題:找零錢——貪心
②部分背包:性價比排序
③區間問題
給定 n 個區間,每個區間左右端點分別為 li, ri,現在要求選出盡量多的區間使得它們兩兩不相交 (不包括端點),問最多能選出幾個區間:
按照右端點從小到大排序決策。選擇右端點最小的,剩余的空間最大。決策具有包容性。
④順序問題
給定 n 個數 ai,再給出 n 個數 bi,現在要求你重新排列 b 的順序,
使得$\sum_{i=1}^n ai\times bi$最小
排序不等式,交換法即可證明。
?
?
二、貪心的一般證明方法,也可以看做是入手的方法:
1.微擾法(臨項交換)
一般用于對于若干個數排序,然后找最優解等等。
例題:
之前模型的④順序問題。排序不等式的證明。
經典地,NOIP2012國王游戲。
還有疊羅漢的問題:Guard Mark
都是交換即可證明排序的條件。
還有分兩段甚至更多段交換的:BZOJ 3709&&AGC 018 C——多段排序的微擾法
?
還有從國王游戲衍生的:皇后游戲:luoguP2123 皇后游戲——微擾法的應用與排序傳遞性的證明
皇后游戲其實是微擾法的究極題目了。
它告訴我們,微擾法的另一個適用條件是排序的大小關系具有傳遞性。
?
2.范圍縮放
3.決策包容性
模型的③區間問題 就是很好的例子。
4.反證法
5.數學歸納法
?
三、還有一些貪心的常用方法:
1.高位貪心:從高位到低位確定,本質是大小比較的本質:先比較高位,再比較低位。
①字典序問題。
②異或問題:給定 n 個數,求選兩個數進行異或操作所能得到的最大值。0/1trie上高位貪心即可。
還有一個經典地高位貪心+dp驗證題目:CF981D Bookshelves
2.反悔貪心
(名字是我自己起的)
貪心是不能反悔的。因為它就是選擇當前的最優解。
但是如果當前最優解不是全局最優解怎么辦?
我們可以設計一種反悔的方法,并且和貪心的手法結合。
使得貪心隨便選擇,都可以達到正解。
反悔自動機與反悔堆——有關貪心的反悔操作
3.樹上貪心:
這種貪心往往和子樹、兒子的信息聯系在一起,有的甚至和樹形dp有些類似。但是本質其實是貪心。
例題:[POI2008]MAF-Mafia
2067: [Poi2004]SZN——樹上貪心+二分
?
?
其他的貪心:
1.[NOI2017]蔬菜——時光倒流+貪心
轉載于:https://www.cnblogs.com/Miracevin/p/9795107.html
總結
- 上一篇: Anaconda创建环境、删除环境、激活
- 下一篇: jzoj5906