洛谷 P1880 NOI1995 石子合併

2021-08-27 05:37:24 字數 739 閱讀 1679

這道題是之前石子合併的加強板

不同在於是乙個環

處理方法就是把陣列 

乘以2,列舉起點轉化成鏈。

以後這種環的問題應該都可以這樣來轉化。

陣列空間不要忘了乘以2

然後要注意區間從長度為2開始,初始化為最大或最小

注意這裡的得分是合併之後的得分,所以單獨一堆是沒有得分的。

#include#include#include#define rep(i, a, b) for(int i = (a); i < (b); i++)

#define _for(i, a, b) for(int i = (a); i <= (b); i++)

using namespace std;

const int maxn = 212;

int f1[maxn][maxn], f2[maxn][maxn], a[maxn], n;

int main()

_for(i, 1, n) a[n + i] = a[n] + a[i];

int ans1 = 0, ans2 = 1e8;

_for(d, 1, n)

for(int st = 1; st + d - 1 <= 2 * n; st++)

if(d == n)

}printf("%d\n%d\n", ans2, ans1);

return 0;

}

洛谷 P1880 NOI1995 石子合併

在乙個圓形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。試設計出1個演算法,計算出將n堆石子合併成1堆的最小得分和最大得分.輸入格式 資料的第1行試正整數n,1 n 100,表示有n堆石子.第2行有n個數,分別...

洛谷 P1880 NOI1995 石子合併

鏈結 思路 區間dp,只不過是環上的,把整個序列複製乙份就好了。dp l r 表示l到r的最大 小值,狀態轉移方程就是dp l r max min 5455 inta m 56int sum m 57int dp max 1005 1005 58 int dp min 1005 1005 59 in...

洛谷P1880 NOI1995 石子合併 題解

在乙個圓形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。試設計出1個演算法,計算出將n堆石子合併成1堆的最小得分和最大得分.輸入格式 資料的第1行試正整數n,1 n 100,表示有n堆石子.第2行有n個數,分別...