斜率優化動態規劃

2022-05-20 04:37:18 字數 3161 閱讀 8281

fi

=min⁡(

fj+s

i2+(

sj+l

)2−2

si(s

j+l)

)fi​

=min(f

j​+s

i2​+

(sj​

+l)2

−2si

​(sj

​+l)

)形如這個式子關於i的項關於j的項混雜(相乘) 的狀態轉移方程, 可以使用斜率優化來加速 .

接下來以優化這個式子為例說說斜率優化.

將上方給出的式子去掉 min

min, 僅關於j

j的項放在左邊, 關於i

i的項放在右邊得 ↓↓f

j+(s

j+l)

2=2s

isj+

fi−s

i2+2

lsif

j​+(

sj​+

l)2=

2si​

sj​+

fi​−

si2​

+2ls

i​這個時候原式為 y=k

x+by

=kx+

b 的形式, 其中∵j

∈[1,

i)∵j

∈[1,

i)且為乙個單調遞增的正整數數列∴x

,y∴x

,y都隨 j

j 單調遞增.

又 ∵k∵k

始終不變∴∴

上式代表了乙個斜率不變, 隨著經過點(x,

y)(x

,y)的變化,截距也隨之變化的直線 .

暫且稱 (x,

y)(x

,y) 代表的點為決策點,

由於單調遞增,決策點構成的圖象為下凸殼, 這裡給出概念圖.

備註: kbc

dkbc​d​

.我們需要截距b

b 最小進而使答案最優, 即找到乙個最優的決策點.找到

第一條斜

率大於k

的線段,

過左端點

的直線截

距即為最

小值.找

到第一條

斜率大於

k的線段

,過左端

點的直線

截距即為

最小值.

使用單調佇列維護, 沒學過的可以看 這裡 了解一下,

具體地說:

對上轉移方程, 應當維護斜率從隊首到隊尾的單調遞增佇列,

設當前是第 i

i 個點,

不斷彈出隊首, 直到隊首次隊首的斜率大於等於k

k 或 佇列長度為 1

1 , 隊首即為當前最優的決策點.

不斷彈出隊尾, 直到隊尾次隊尾的斜率小於次隊尾與 i

i 的斜率, 將第 i

i 個點從隊尾入隊(對後面來說新的決策) .

時間複雜度 o(n

)o(n

) .經典例題kk

不確定正負, 此時不能彈出隊首, 但是仍然可以維護單調性, 二分查詢來彌補, 時間複雜度 o(n

logn

)o(n

logn

) , 例題 , 下有數學解釋 .

決策點的橫座標不單調遞增, 需要在任意位置插入決策點, 待填坑

待填坑 .

以 該題 的式子為例, (已經去掉 min

⁡min),f

[i]=

f[j]

+st[

i]∗(

sc[i

]−sc

[j])

+s∗(

sc[n

]−sc

[j])

f[i]

=f[j

]+st

​[i]

∗(sc

​[i]

−sc​

[j])

+s∗(

sc​[

n]−s

c​[j

])設 決策 j

j 比 決策 k

k 優, 則f[

j]+s

t[i]

∗(sc

[i]−

sc[j

])+s

∗(sc

[n]−

sc[j

])k]+s

t[i]

∗(sc

[i]−

sc[k

])+s

∗(sc

[n]−

sc[k

])f[

j]+s

t​[i

]∗(s

c​[i

]−sc

​[j]

)+s∗

(sc​

[n]−

sc​[j])

k]+s

t​[i

]∗(s

c​[i

]−sc

​[k]

)+s∗

(sc​

[n]−

sc​[

k])化簡得f[

j]−f

[k]s

c[j]

−sc[

k]st[i

]sc​

[j]−

sc​[

k]f[

j]−f

[k]​

st​[

i].若 st[

i]st

​[i]

單調遞增, 則 j

j 在以後不可能比 k

k 更優了, 所以可以執行彈出隊首的操作 .

否則 j

j 可能在以後的某乙個決策中比 k

k 更優, 不能直接彈出隊首 .

動態規劃 斜率優化

一 引用 一般dp 方程可以轉化成 dp i f j x i 的形式,其中 f j 中儲存了只與 j相關的量。這樣的 dp方程可以用單調佇列進行優化,從而使得 o n 2 的複雜度降到 o n 可是並不是所有的方程都可以轉化成上面的形式,舉個例子 dp i dp j x i x j x i x j ...

動態規劃 單調斜率優化DP

acwing 1087.修剪草坪 旅行商問題 輸入樣例 641 351 23 輸出樣例 acwing 1087.修剪草坪 動態規劃 f i max f i 1 f i j 1 sum i j sum i f i 表示從前i個中選,且合法的方案數。令x i j,則有 f i min f i 1 f x...

演算法 動態規劃之斜率優化

斜率優化通常使用單調佇列輔助進行實現,用於優化 dp 的時間複雜度。使用單調佇列優化 dp 通常可以解決型如 dp i min f j g i 的狀態轉移方程。其中 f i 是只關於 i 的函式,g j 是只關於 j 的函式。樸素的解決方法是在第二層迴圈中列舉 j 來實現最小值,時間複雜度為 o n...