乙個斜率優化?

2021-07-10 07:37:47 字數 510 閱讀 6180

乙個n*m棋盤每格有乙個數字,用p個同半徑的已知圓心的圓覆蓋棋盤,求最小半徑使得覆蓋方格數字和不少於k。 1≤

n,m≤

1000,1

≤p≤10

9 求一些圓怎麼覆蓋棋盤,不如考慮方格怎麼會被圓覆蓋,所以可以求離方格最近的圓心。

先考慮一行內。求一行內每個方格距離最近的圓心的距離的平方,顯然正反掃兩遍即可。 令g

[i][

j]表示第i行到(i,j)最近圓心距離的平方。然後f

[i][

j]=min

那麼f[

i][j

] 就是在1i

行內距離(i

,j) 最近的距離了,倒過來做一下就可以知道全部得了。 但是f

[i][

j]要o(n

3)才可求得,考慮優化。發現形式是經典的斜率優化(實際上似乎很多求歐幾里得距離的dp都可以斜率優化)。然後針對每列開乙個單調佇列即可。

其實kd樹可能可以水很多分吧。。。

gdsoi t2。

Dp優化 斜率優化

該模板的ai要具有單調性,也就是sum陣列 若沒有單調性,加個二分即可 我的一篇題解,很詳細 1 寫出狀態轉移方程 2 按照斜率優化的式子推導出式子 3 代入模板即可。include include using namespace std typedef long long ll const int...

斜率優化 DP

我們知道,有些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斜率優化

我們知道,有些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 如果把右邊...