斜率優化

幾個月前剛開始被拉去和高二一起學這個東西,感覺好高大上啊。。。

然後前幾天碰到一道,覺得似乎可以理解一些了(其實是因爲我的草稿本終於可以派上用場了大笑),於是就下定決心要學了。

其實蠻好理解的。假如給你一條直線y=kx+b,告訴你k,還有一些點,讓你求過這些點的能得到的最大的b。

假如k<0,我們最後要用的點就是右圖這樣一個凸殼上的點。

k>0同理。

假如k (<0) 不斷變小,那我們選的點的橫座標也會不斷變大。

於是,當我們在做dp題的時候,遇到各種各樣奇葩的轉移方程式的時候,就可以把轉移方程轉化爲y=kx+b,求最大或最小的b的形式,然後看一看有沒有上述性質(單調),如果有就可以斜率優化啦。。。


關於如何弄成那種形式。。我認爲是這樣的:

假如由dp[j]更新dp[i],所有和 j 無關的是b,所有與 i 無關的是y,剩下的是kx,其中的 k 是關於 i 的式子,隨着 i 增大必須具有單調性。如果看着有點暈,拿一道題自己搞一搞就明白了。

於是寫一個隊列,維護一堆點,就可以啦。。。


下面附上幾道水題。

由於本蒟蒻代碼太醜,我就不貼代碼了。

apio2010 特別行動隊  

sdoi2016 征途

apio2014 序列分割

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章