題目描述
在乙個圓形操場的四周擺放 nn 堆石子,現要將石子有次序地合併成一堆.規定每次只能選相鄰的2堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。
試設計出乙個演算法,計算出將 nn 堆石子合併成 11 堆的最小得分和最大得分。
輸入格式
資料的第 11 行是正整數 nn,表示有n堆石子。
第 22 行有 nn 個整數,第 ii 個整數 a_iai
表示第 ii 堆石子的個數。
輸出格式
輸出共 22 行,第 11 行為最小得分,第 22 行為最大得分。
輸入輸出樣例
輸入 #1複製
44 5 9 4
輸出 #1複製
4354
#include
#include
using
namespace std;
int dp[
1001][
1001];
int pre[
1001];
int a[
1001];
int ***[
1001][
1001];
int ansa,ansi=
1e9;
intmain()
for(
int i=n+
1;i<=
2*n;i++
)//2*n是因為石子為環;
for(
int len=
2;len<=n;len++
)//由於長度為一時合併就是自身所以從二開始;}}
for(
int i=
1;i<=n;i++
) cout
}
石子合併 (區間DP
問題描述 在乙個操場上擺放著一行共n堆的石子。現要將石子有序地合併成一堆。規定每次只能選相鄰的兩堆合併成新的一堆,並將新的一堆石子數記為該次合併的得分。請編輯計算出將n堆石子合併成一堆的最小得分和將n堆石子合併成一堆的最大得分。輸入檔案 輸入第一行為n n 1000 表示有n堆石子,第二行為n個用空...
石子合併 區間dp
有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的代價最小值。假設dp 1 4 表示將區間1 4的石子合併所花費的代價。dp 1 4 可以劃分為dp 1 1 dp 2...
石子合併 (區間DP)
題目鏈結 描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的代價最小值。輸入第一行有乙個整數n,表示有n堆石子。接下來的一行有n 0 n 200 個數,分別表示...