我們知道當斜率優化dp中的點的x座標不單調時,需要splay來維護凸殼,但是**量比較大,容易寫掛。
我們還有一種神奇的做法:cdq分治。
先把n個狀態排成乙個序列。考慮乙個分治過程solve(l,r),每次分成[l,mid],[mid+1,r]兩部分。
顯然對於fi只和1~i-1有關,所以我們solve(l,mid)遞迴求解,即可得到[l,mid]的所有f值。
現在我們需要考慮用[l,mid]中求出的值去更新[mid+1,r]中的待求的f:
這個子問題已經是靜態的了,然後我們就可以排序了。
對於[l,mid]中的所有決策點按x排序,然後就可以線性構造出這個凸殼。
再對[mid+1,r]中的狀態按斜率排序。這樣又能線性在凸殼中找到最優點。是不是很妙啊。
總複雜度o(nlog^2n)。雖然多了乙個log, 但是程式設計複雜度降低了很多,對於寫不動大資料結構的老年人選手是很好的選擇。
cdq分治的這種動態轉靜態的思想特別好,許多資料結構題都適用。
打怪(CDQ分治 斜率優化)
敵方有 n nn 只怪,每只的攻擊力為 a ia i ai 血量為 d id i di 我方只有乙隻攻擊力為 b bb 的怪。每回合戰鬥的流程為 求所受傷害最小值。顯然我方只有在連續攻擊乙隻怪致死後,才會換下乙隻。設第 i ii 只怪需要被連續攻擊 c i di 1b 1c i lfloor fra...
學習筆記 斜率優化DP
作為數學渣,先複習一下已知兩點 x 1,y 1 x 2,y 2 怎麼求過兩點的一次函式的斜率.待定係數法代入 y kx b 有 x 1k b y 1 x 2k b y 2 兩式相減有 k frac 故事圍繞著 演算法競賽高階指南 的三一道例題展開 任務安排 1 假如我們啟動了乙個任務 l,r 那麼它...
斜率優化DP學習筆記
本文以luogup3195 玩具裝箱為例,我們很容易可以的出下面這個柿子 f i min 設 b i s i i j 為 f i 的最優決策點,則有 f i f j b i b j l 1 2 把只與 j 有關的放在左邊 f j b j 2 b j l 1 2 b i b j b i 2 l 1 2...