石子合併
有n堆石子排成一排(n<=100),現要將石子有次序地合併成一堆,規定每次只能選相鄰的兩堆合併成一堆,並將新的一堆的石子數,記為該次合併的得分,編一程式,給出堆數n及每堆石子數(<=200);
(1)選擇一種合併石子的方案,使得做n-1次合併,得分的總和最少
(2)選擇一種合併石子的方案,使得做n-1次合併,得分的總和最多
第一行為石子堆數n
第二行為每堆石子數,每兩個數之間用一空格分隔。
第一行為最小合併得分,第二行是最大的合併得分。
在這裡給出一組輸入。例如:
4
4 5 9 4
在這裡給出相應的輸出。例如:
44
54
#include #include #include #include #include #include #include #include #include #include #include #include #include const int inf=0x3f3f3f3f;
typedef long long ll;
const int mod=1e9+7;
using namespace std;
#define arr_size 10001
#define num 500005
#define n 105
int max(int n);
int min(int n);
int dp[n][n];
int p[n][n];
int sum[n];
int main()
cout
}int min(int n)
for(int d=1; d}
dp[i][end] = tmp;
p[i][end] = k;}}
return dp[1][n];
}int max(int n)
for(int len=1; lendp[i][j] += sum[j] - sum[i-1];}}
return dp[1][n];
}
動態規劃之合併石子
首先我們要搞懂什麼是動態規劃。我覺得動態規劃就是把乙個大問題分解為多個小問題,每個小問題的決策都會影響到下乙個小問題的決策。下乙個小問題的決策就是由上乙個小問題的決策而產生的。乙個狀態經過乙個決策變成了另外乙個狀態,這個過程就是狀態轉移,用來描述狀態轉移的方程就是狀態轉移方程。在乙個操場上一排地擺放...
動態規劃專題之石子合併
動態規劃專題講義 專題九 合併石子問題 name 動態規劃專題之石子合併 author 巧若拙 description 在乙個操場上擺放著一排n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合...
動態規劃 之 區間DP練習
loj 放上了那麼多 資訊學奧賽一本通 上的題 雖然我並沒有這本書 我要給它點乙個大大的贊 以後分類刷題不愁啦!那就一道道說吧。將 n 堆石子繞圓形操場排放,現要將石子有序地合併成一堆。規定每次只能選相鄰的兩堆合併成新的一堆,並將新的一堆的石子數記做該次合併的得分。求 n 1 次合併後得分總和的最大...