日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

斜率优化

發布時間:2025/3/14 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 斜率优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

很久之前一直覺得斜優很難理解,,,今天再看發現好像是挺好理解的。

不過如果x不單調就要用splay或者cdq維護了,,,,依舊很惡心。、

先講最基礎的斜優吧,不單調的以后再填坑。

先來看一道例題:CF311B Cats Transport 斜率優化DP

當我們得到DP方程$f[i][j] = f[i - 1][k] + (j - k) t_{j} - (s[j] - s[k])$之后,我們對式子進行轉化,

將只跟k相關的放在式子左邊,把剩余部分放在式子右邊,同時在式子右邊把只跟k相關的放在一起,把既跟j有關又跟k有關放在一起。

$$f[i][j] = f[i - 1][k] + (j - k) t_{j} - (s[j] - s[k])$$
$$\Rightarrow f[i][j] = f[i - 1][k] + jt_{j} - kt_{j} - s[j] + s[k]$$
$$\Rightarrow -s[k] - f[i - 1][k] = -kt_{j} + jt_{j} - s[j] - f[i][j]$$
$$\Rightarrow s[k] + f[i - 1][k] = t_{j}k - jt_{j} + s[j] + f[i][j]$$

我們可以假設$y = s[k] + f[i - 1][k], x = k, K = t_{j}, b = -jt_{j} + s[j] + f[i][j]$。

那么這就是一個$y = kx+b$的形式的式子。

我們可以把所有的決策點都看作一個二維平面上的點(x, y),因為我們只需要有(x, y)就可以知道這個點對當前決策的所有貢獻。

而跟當前狀態有關的只有k和b。觀察到我們要求f[i][j]最小,就是要求b最小(因為b的其他部分是固定的)。

而k是固定的,于是我們可以看做一個二維平面上有很多點,我們要用一根斜率為k的直線覆蓋某個點,使得b最小。

顯然這個使得b最小的點會出現在所有點的下凸包上,于是我們考慮維護一個下凸包,然后每次在這個凸包上尋找最優決策點。

相當于用一條斜率為K的直線靠近這個凸包,第一個碰到的點就是最優決策點。

因為K是遞增的,所以在下凸包上第一個被碰到的點是單調遞增的,又因為x遞增,所以可以直接用單調隊列維護。

感覺講得有點亂,,,NOIP之后再來完善吧

emmm。。。好像咕了,,,不想寫了,,,懶得畫圖

轉載于:https://www.cnblogs.com/ww3113306/p/9936451.html

總結

以上是生活随笔為你收集整理的斜率优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。