決策單調性複習
二分棧
直接畫圖吧
有時候dp的決策會滿足單調性,如下:(曲線代表前面的某個決策點對於x座標上的數的貢獻構成的圖像)
其中1234起點依次遞增。現在來看1和2兩條曲線,在交點前2更優,交點後1更優。因爲1的起點在2之前,並且有決策單調性(斜率單增,1比2增長的越來越快),所以總有一個點使得在這之後1比2更優。而如果是下面這種:
2就永遠不可能比1更優。
於是就自然的有一種想法:二分出什麼時候後面比前面更優,並且搞一個單調棧來保存。
關於具體方法:先看第一張圖中的1,2和4,假設現在棧中是1,2,現在處理4,可以發現4和2的交點在1和2的交點之後
那麼在1和2的交點後1更優,4和2的交點前4更優,2就沒用了。
有用的情況可以看1,2和3,則在2和3的交點後,1和2的交點前2是有用的。
那麼我們求出當前曲線和棧裏最後的曲線的交點,和棧裏最後兩條曲線的交點比較就行了。注意隨着x的增加要彈棧。還有一個注意事項是二分的下界,出現第二種情況的時候交點應該是0。
而對於斜率單調降的函數也差不多,開個單調隊列就行。