廢話,當然是在dp式子滿足某些性質的時候來優化複雜度……
對於\(j\)往大於\(j\)的\(i\)轉移,可以表示成乙個關於\(i\)的函式\(f_j(i)\),也就是\(dp_i=\max/\min\\)。
若是取\(\max\),並且在某乙個地方\(f_j(i)\)從下面跑到了\(f_k(i)\)的上面(如果加入\(f_j(i)\)這個函式時本來就在\(f_k(i)\)的上面那麼不算),就稱之為\(j\)取代了\(k\)。取\(\min\)同理。
如果滿足決策單調性,那麼必須滿足:對於任意\(i,j\in [1,n]\),\(f_j(x)\)與\(f_i(x)\)沒有交點或是只有乙個交點,也就是\(i\)和\(j\)最多取代一次。
狹義的決策單調性是指對於\(i和他們的決策點\(p_i,p_j\),會有\(p_i。也就是說,對於\(j,就只能有\(k\)取代\(j\)。
廣義的決策單調性指只要乙個題中取代關係唯一(只有大取代小或小取代大),那麼都可以做。
顯然,狹義決策單調性也被包含在廣義決策單調性內。
顯然,狹義和廣義是我自己編出來的。可能是民科行為,但只是為了寫著簡單,所以求不噴。
簡單易懂,適合\(dp_i=\max/\min\\}\)這種與\(dp_j\)無關的遞推式。
考慮乙個類似整體二分的做法:設\(solve(l,r,l,r)\)表示已知\([l,r]\)全部由\([l,r]\)轉移而來,求出\(dp[l,r]\)。
每次設\(mid=(l+r)/2\),然後暴力掃\([l,r]\),找到\(mid\)的決策點\(p\),然後分治\(solve(l,mid-1,l,p)\),\(solve(mid+1,r,p,r)\)。
複雜度:會做\(\log n\)層,每層的\(\sum(r-l+r-l)\)都是\(o(n)\)的,所以總複雜度\(n\log n\)。
優點:當\(w_\)不能\(o(1)\)或\(o(\log n)\)計算時用暴力掃的方式或許可以做出來,比如區間逆序對等。
缺點:轉移不按順序,所以遞推式必須與\(dp_j\)無關。如果有關,那麼需要強套乙個 cdq 分治上去,會多乙個 \(\log\) 。
注意:如果做的時候還掃了\([r,l]\),那麼複雜度分析就會掛!
適合\(dp_i=\max/\min\\}\)的遞推式,要求\(w_\)可以快速求出。
狹義決策單調性保證了比較靠前的決策點被取代後就可以被忽略了,所以可以維護乙個佇列,隊首是當前最優的決策點,隊尾是後面加入、還有潛力取代前面的決策點。(記\(q[l]\)為隊首,\(q[r]\)為隊尾)
每次考慮\(q[l]\)和\(q[l+1]\),如果\(q[l]\)沒那麼優,那麼就把它彈掉。
加入當前點的時候,就要搞一些事情了。
如果什麼都不管直接加入,那麼會出現這樣的尷尬情況:\(q[l]\)優於\(q[l+1]\),但\(q[l]\)劣於\(q[l+2]\)。
如何避免呢?使用上面\(f_j(x)\)函式數形結合的思想,如果加入這個點\(i\)後\(q[r]\)潛力就沒了,也就是\(i\)取代\(q[r-1]\)比\(q[r]\)取代\(q[r-1]\)還快,那麼就把\(q[r]\)彈掉。這樣一來,上面的\(q[l+1]\)根本就不會出現在佇列裡面。
至於判斷在**會取代,那就要二分那個位置了。
複雜度:顯然\(o(n\log n)\)。
優點:轉移按順序。
缺點:要求\(w_\)可以快速求出。
大取代小的時候上面已經講過,不再贅述。
現在是小取代大,比如\(f_2(i)\)一直默默無聞,而\(f_4(i)\)一直是統治地位,突然在\(i=10\)的時候2把4取代了。
這種時候,就不能再用單調佇列,而是要用單調棧了。當棧頂沒有下面的函式優的時候就彈棧。壓入當前函式時若\(st[top-1]\)取代\(i\)比\(st[top]\)還快就彈棧。
本質上其實和單調佇列差別不大,也是要二分,也是要求\(w_\)能快速求出,複雜度也是\(o(n\log n)\)。
不過小取代大這種情況只有這一種做法,所以就沒有優缺點一說了。
講了這麼多做法,還沒有講怎麼判斷這一性質。
一般來說應該是先寫出dp式子,各種優化方法試一遍都不行,那就嘗試嚴謹或感性證明。
如果實在不會證,那可能可以打表猜結論。猜中了當然好,但如果隨機資料都過了,而結論其實是假的,那……
那你就要祈禱出題人用的就是隨機資料。
一般來說我傾向於隨機資料猜結論。
有一種簡單的判斷決策單調性的方法(但只能適用於某些性質更好的 \(w\) ):考慮 \(r\) 變大的時候對 \(l\) 的影響,比如區間逆序對的時候對 \(l_1\) 的影響肯定是不小於 \(l_2>l_1\) 的。
決策單調性優化DP 分治優化決策單調性
前言 本來這篇已經寫了 frac 了 然後我關機時忘儲存了。華麗的分割線 對於類似於 dp i j max min dp k 1 j 1 count k,i 不妨設 當 最後一次 max min 更新時 f i,j k 若有 forall i,j in 1,n s.t.i j rightarrow ...
決策單調性優化 dp 合集
p1912 noi2009 詩人小g 後面的決策能反超前面的,二分決策佇列。p3515 poi2011 lightning conductor 不是決策單調性,但可以維護決策的棧。後面的決策可能被前面的反超。cf321e ciel and gondolas 決策單調性在層之間轉移,可以分治 或者利用...
決策單調性優化dp 專題練習
對於形如 dp i dp j i j i j 型別的轉移方程,維護乙個上凸包或者下凸包,找到切點快速求解 技法 1.單調佇列 在保證插入和查詢的x座標均具有單調性時可以使用 2.單調棧 二分 保證插入有單調性,不保證查詢有單調性 3.分治 1 或 2 在每次分治時將 l,mid 這段區間排序後插入,...