斜率優化DP 學習筆記 更新中

2021-09-07 08:32:53 字數 1176 閱讀 4559

參考資料:

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 ...