日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

luogu p4767 邮局

發布時間:2025/3/12 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 luogu p4767 邮局 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定V個村莊的位置xi,建P個郵局,使每個村莊到最近的郵局的距離之和最小。P?<=?300,?P?<=?V?<=?3000,?1?<=?xi?<=?10000

這是個類2D1D的dp,狀態??由??轉移得到,依次推出以下結論:

時,?并且

從而得到

從而有決策單調性

最后,當我們需要求出的時候,只需要枚舉作為決策區間即可。注意到需要的值,所以需要倒著枚舉。

const int N = 3010, M = 310, inf = 1e9; int a[N], w[N][N], dp[N][M], m[N][M]; int v, p;void init_w() {for (int i = 1; i <= v; i ++){w[i][i] = 0;for (int j = i + 1; j <= v; j ++)w[i][j] = w[i][j - 1] + a[j] - a[(i + j) >> 1];}return; }int main() {int T = 1;//T = read();while (T --){v = read(); p = read();for (int i = 1; i <= v; i ++)a[i] = read();sort (a + 1, a + 1 + v);init_w();for (int i = 1; i <= v; i ++)dp[i][1] = w[1][i];for (int j = 2; j <= p; j ++){m[v + 1][j] = v;for (int i = v; i >= j; i --){int mn = inf, p;for (int k = max(m[i][j - 1], j - 1); k <= min(m[i + 1][j], i - 1); k ++)if (dp[k][j - 1] + w[k + 1][i] < mn){mn = dp[k][j - 1] + w[k + 1][i];p = k;}m[i][j] = p;dp[i][j] = mn;}}cout << dp[v][p];}return 0; }

總結

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

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