1148環形石子合併

2021-08-29 12:26:19 字數 974 閱讀 7251

時限:1000ms 記憶體限制:10000k  總時限:3000ms

描述在乙個圓形操場的四周擺放著n堆石子(n<= 100),現要將石子有次序地合併成一堆。規定每次只能選取相鄰的兩堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。編一程式,讀入石子堆數n及每堆的石子數(<=20)。選擇一種合併石子的方案,使得做n-1次合併,得分的總和最小;比如有4堆石子:4 4 5 9 則最佳合併方案如下:

4 4 5 9 score: 0

8 5 9 score: 8

13 9 score: 8 + 13 = 21

22 score: 8 + 13 + 22 = 43

輸入可能有多組測試資料。 當輸入n=0時結束! 第一行為石子堆數n(1<=n<=100);第二行為n堆的石子每堆的石子數,每兩個數之間用乙個空格分隔。

輸出合併的最小得分,每個結果一行。

輸入樣例

4 4 4 5 9 0

輸出樣例

#include

#include

#include

using namespace std;

int n,minh,minm;

int a[210];

int m[210][210];//m[i][j]記錄從第i個到第j個石子堆合併的最小得分

int sum(int i,int j)

return s;

}int minscore()

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

for(int i=2;i<=2*n-1;i++)//表示間隔大小

}m[j][i+j]=minh;}}

minm=99999999;

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

return minm;

}int main()

for(int i=1;i<=n-1;i++)

cout<}return 0;

}

石子合併(三) 環形合併

題目描述 在乙個園形操場的四周擺放n堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,合併的花費為這相鄰兩堆之和 試設計出1個演算法,計算出將n堆石子合併成1堆的最小花費.輸入輸出格式 輸入格式 資料的第1行試正整數n,1 n 100,表示有n堆石子.第2行有n個數,分別...

ACWing 1068 環形石子合併

將n nn堆石子繞圓形操場排放,現要將石子有序地合併成一堆。規定每次只能選相鄰的兩堆合併成新的一堆,並將新的一堆的石子數記做該次合併的得分。請編寫乙個程式,讀入堆數n nn及每堆的石子數,並進行如下計算 選擇一種合併石子的方案,使得做n 1 n 1n 1次合併得分總和最大。選擇一種合併石子的方案,使...

NC50493 環形石子合併

狀態表示 f i,j 從下標 i 合併到下標 j 的最大價值。先看石子合併 n 堆石子 1,2,n f 1,n 即為答案。再看環形 最後的答案為 f 1,n f n,1 和f 1,n 結果相同 f 2,1 f 3,2 中的最小值。我們當然不能在環上直接 dp 因為這樣 f 2,1 f 3,2 的合併...