c語言練習動態規劃 貪心之石子合併

2021-10-23 04:33:01 字數 1113 閱讀 2976

石子合併

有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 次合併後得分總和的最大...