有n堆石子排成一圈,每次選擇相鄰的兩堆石子,將其合併為一堆,記錄該次合併的得分為兩堆石子個數之和。已知每堆石子的石子個數,求當所有石子合併為一堆時,最小的總得分。
第一行乙個整數n(1 <= n <= 200),表示石子堆數; 第二行n個整數a(1 <= a <= 100),表示每堆石子的個數,這些石子首尾相接排成一圈。
乙個整數,表示最小總得分。
57 6 5 7 100
175
unknown
#includeusingnamespace
std;
#define ll long long
#define eps 1e-9
#define pi acos(-1)
const
int inf = 0x3f3f3f3f
;const
int mod = 1e9+7
;const
int maxn = 1000 + 8
;int
n, a[maxn], sum[maxn], dp[maxn][maxn], mi;
intmain()
for(int len = 1; len <= n; len++)
}mi = dp[1
][n];
for(int i = 2; i <= n; i++)
if(mi > dp[i][i - 1
]) mi = dp[i][i - 1
]; cout
<< mi <<'\n'
;
return0;
}
P1880 石子合併2 區間dp
在乙個圓形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。試設計出1個演算法,計算出將n堆石子合併成1堆的最小得分和最大得分.資料的第1行試正整數n,1 n 100,表示有n堆石子.第2行有n個數,分別表示每堆石...
Codevs2102 石子歸併 2 區間DP
題目描述 description 在乙個園形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。試設計出1個演算法,計算出將n堆石子合併成1堆的最小得分和最大得分.輸入描述 input description 資料的...
nyoj 737 石子合併(一) 區間dp
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的代價最小值。輸入 有多組測試資料,輸入到檔案...