大佬們要讓蒟蒻給他們講斜率優化 …….(色色發抖
斜率優化是什麼呢,先看點沒用的東西。
考慮一類動態規劃,滿足這樣的性質:
狀態數有
n 個,乙個狀態的決策數有
n個形似f
[i]=
♂i1f
[j] 定義♂為亂七八糟的運算
這樣的dp有什麼好的性質呢???
首先考慮這樣一種 子型別f[
i]=m
ini−
1j=1
f[j]
+w[j
,i]
當對於乙個w[j,i]滿足四邊形不等式的時候,決策單調
那麼我們首先來說什麼叫四邊形不等式 w[
i,j]
+w[i
+1,j
+1]≤
w[i+
1,j]
+w[i
,j+1
] 是不是一臉蒙蔽?
其實是網上的柿子非得撞壁,寫成這個13樣,不信你移個項 w[
i+1,
j+1]
−w[i
+1,j
]≤w[
i,j+
1]−w
[i,j
] 就是這樣的,對於i+
1 狀態的決策集,
j 位置決策的增長幅度不如在
i位置的決策集中j+
1 位置的增長幅度大
顯然這意味著,如果乙個決策在
i 位置就已經被淘汰,無論他怎麼跑,都追不上其他在i+
1位置的決策了,所以有這樣的性質
對於狀態
x 的兩個決策位置 i≤
j如果i 不如
j優,則對x+
1 必然不選擇i
這有啥用啊?就是把你原來從1列舉變成從x−
1決策點列舉了??
還是暴力,有個卵用?
那我們換乙個角度思考,之前都是對狀態想決策,現在變成對決策想狀態。
對於乙個決策
j 能決策的狀態區間是什麼,一定是狀態集中的一段連續的區間
所以我們可以考慮這樣乙個問題,(以下數字表示決策點位置編號)
對於決策1有這樣的決策區間
1111111111
對於決策2來了,他一定決策這樣的區間
1111122222
以此類推
所以我們對每個決策點決策區間維護單調棧,每來乙個決策,就在單調棧中二分決策點變化位置,彈掉後面的區間,拆開當前區間即可
廢話說完了
斜率優化是個啥???
考慮這樣另一種形式的子型別f[
i]=m
ini−
1j=1
(a[i
]∗f[
j]+b
[i]∗
g[j]
) 美化以下柿子 f[
i]=m
ini−
1j=1
(a[i
]∗x[
j]+b
[i]∗
y[j]
) 求a
∗x+b
∗y的最值?
變成斜截式y=
−ba∗
x+pb
現在乙個決策點變成了乙個數對,(x
,y)
問題轉化成了給定一些斜率固定的直線,以及二維平面上的點集
求一條直線在平面上穿過某一點使得與y軸截距最值
直線方程?線性規劃??
顯然是卡在凸包上的最優啊
下面分情況討論 如果x
是遞增的,斜率也是遞增的
就相當於一邊向後插點維護凸包,一邊在前面用直線卡掉不合法的點
顯然單調佇列,隊尾插點,隊頭按直線彈掉,時間複雜度o(
n)。 如果x遞增,斜率不遞增,就要正常維護凸包,在凸包上二分找到直線卡的點位置。
時間複雜度o(
n∗lo
g2n)
如果x和斜率都不遞增,用平衡樹維護凸包,動態插點,刪點,反正我不會寫。
可寫的方法是cdq,對x進行cdq,左右分別維護凸包,o(
n)合併凸包。
時間複雜度o(
n∗lo
g2n)
決策單調性優化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 ...
單調佇列優化和決策單調性優化
有時狀態轉移方程形如f i j min w i,j 其中l i,j k j,l i,j l i,j 1 如果兩個決策k1,k2滿足f i 1 k1 f i 1 k2 且k1 k2,那麼k1出現後k2就沒用了。維護乙個佇列,按k從小到大存下所有有用的決策,f i 1 k 是單調上公升的。每次加入新決策...
整理 斜率or單調佇列優化dp
題意 求乙個序列的子區間滿足長度大於k且所有數平均值最大 周源 裡的題。之前有人說周源講的是錯的 其實應該是沒什麼問題的 可以o n 求出 不過這題hdu上的資料不知道怎麼了 反正我在網上找的ac 們全都tle。總之 意思明白就好 反正也是入門題 include include include in...