演算法實驗四 (DP 動態規劃) 石子合併

2021-09-29 09:35:19 字數 718 閱讀 7557

時限: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#includeusing namespace std;

int n,score;

int stone[101];

int memo[101][101];

int sum(int i,int j)

if(n==1)

else

} return 0;

}

演算法提高 合併石子 動態規劃

問題描述 在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。輸入格式 輸入第一行包含乙個整數n,表示石子的堆數。接下來一行,包含n個整數,按順序給出每堆石子的大小 輸出格式 輸出乙個整數,表...

動態規劃 石子合併

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

石子合併動態規劃

在乙個園形操場的四周擺放n堆石子 n 100 現要將石子有次序地合併成一堆。規定每次只能選相鄰的兩堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。編一程式,由檔案讀入堆數n及每堆的石子數 20 選擇一種合併石子的方案,使得做n 1次合併,得分的總和最小 選擇一種合併石子的方案,使得做n ...