參考資料:【一】1.元旦集訓的課件已經很好了
2.
對於一類轉移方程:
f[i]=max
a[i]和c[i]是開始求解前就知道常數,b[j]和d[j]知道f[j]後就知道有關
可以使用斜率優化(不是這個形式就盡量往這個形式化)
【決策單調性】:
對於兩個轉移j和k,設b[j]
假設j比k優或相等,把式子一化就變成了(注意bj-bk是負數啊,我對不起小新)
-a[i]>=(d[k]-d[j])/((b[k]-b[j])
這是乙個斜率的形式,記slope(j,k)=(d[k]-d[j])/((b[k]-b[j])
那麼,-a[i]>=slope(j,k)時j轉移比k轉移優
對於乙個狀態就可以判斷兩個轉移誰更優了
對於三個轉移x y z ,bx
如果slope(x,y)<=slope(y,z),y一定不是任何乙個狀態的最優轉移
證明:假設y是p的最優轉移,-a[p]<=slope(x,y)<=slope(y,z),所以z比y優
然後,這不就是個上凸殼
對於f[i]=min,只是把不等號反轉而已,-a[i]<=slope(j,k)時j轉移比k轉移優,是乙個下凸殼
上下凸殼不是絕對的,有時候有迷之負數
圖形化的考慮,那很像直線方程對吧
斜率形式+j的常數項是y,*j的常數項是x
−a[i]∗b[j]+f[i]=c[j]+d[i]
連線
【二】
如何維護這個凸殼?
以min為例,最優轉移就是求第一點j,slope(j-1,j)<=-a,slope(j,j+1)>=-a,也就是斜率為-a的直線與這個凸殼的切點
1.b單調,-a單調,單調佇列
2.b單調,-a不單調,隊首不能彈,二分slope(q[j],q[j+1])滿足乙個條件的j作為答案
3.4.
學習筆記 斜率優化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...
斜率優化dp筆記
瞎扯 演算法真的是無止境,從暴力到dp原本以為很神奇了,沒想到還能優化dp,而且是把o n 2 變成o n 真是無 說。引入 我們來分析這麼乙個問題,給你n個數,要你把他們分成連續的若干塊,使得讓他們的每段和的平方加起來最小.正常我們會想到的就是o n 2 的dp,方程就是 dp i min dp ...