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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Yinchuan-B The Great Wall

發布時間:2025/3/12 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Yinchuan-B The Great Wall 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

yinchuan-B The Great Wall

給出n個數,將其劃分為k個區間,要求每個區間當中的最大數和最小數的差值之和最大。求k從1到n的答案。
n <= 1e4

因為這個題開始學四邊形優化,其實會了之和回頭看感覺還是蠻簡單的,w(i,j)w(i,j)w(i,j)的四邊形不等式很好證明,然后用個ST表來實現O(1)O(1)O(1)的查詢,1e8的空間還是有點大,所以學著寫了滾動數組。

這個代碼是按照印象中的題意隨便糊的,就過了一下樣例,沒有在oj上進行測試。

const int N = 10010, inf = 1e9; int m[N][2], dp[N][2], STmin[N][20], STmax[N][20], lg2[N];void init(int len) {for (int k = 1; (1 << k) < len; k ++)for (int i = 1; i + (1 << k) - 1 <= len; i ++){STmin[i][k] = min(STmin[i][k - 1], STmin[i + (1 << (k - 1))][k - 1]);STmax[i][k] = max(STmax[i][k - 1], STmax[i + (1 << (k - 1))][k - 1]);}for (int i = 2; i <= len; i ++)lg2[i] = lg2[i >> 1] + 1;return; }inline int w(int l, int r) {int len = r - l + 1;int mx = max(STmax[l][lg2[len]], STmax[r - (1 << lg2[len]) + 1][lg2[len]]);int mn = min(STmin[l][lg2[len]], STmin[r - (1 << lg2[len]) + 1][lg2[len]]);return mx - mn; }int main() {int T = 1;//T = read();while (T --){int n;n = read();for (int i = 1; i <= n; i ++){STmin[i][0] = read();STmax[i][0] = STmin[i][0];}init(n);int now = 0;for (int i = 1; i <= n; i ++)dp[i][now] = w(1, i);printf ("%d\n", dp[n][now]);for (int j = 2; j <= n; j ++){now ^= 1;m[n + 1][now] = n;for (int i = n; i >= 1; i --){int mx = -inf, p;for (int k = max(m[i][now ^ 1], j - 1); k <= min(m[i + 1][now], i - 1); k ++){if (mx < dp[k][now ^ 1] + w(k + 1, i)){mx = dp[k][now ^ 1] + w(k + 1, i);p = k;}}dp[i][now] = mx;m[i][now] = p;}printf ("%d\n", dp[n][now]);}}return 0; }`

總結

以上是生活随笔為你收集整理的Yinchuan-B The Great Wall的全部內容,希望文章能夠幫你解決所遇到的問題。

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