合併石子 dp

2021-08-29 02:06:33 字數 1002 閱讀 2108

時間限制: 1 sec  記憶體限制: 128 mb

提交: 7  解決: 7

[提交][狀態][討論版][命題人:quanxing]

在乙個操場上一排地擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。

計算出將n堆石子合併成一堆的最小得分。

第一行為乙個正整數n (2≤n≤100);

以下n行,每行乙個正整數,小於10000,分別表示第i堆石子的個數(1≤i≤n)。

乙個正整數,即最小得分。

7137

816214

18

239

#include #include 

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace

std;

int a[105

];int dp[105][105

];//

dp[i][j]是把第i堆推到第j堆得最優值

int s[105

];int

main()

for(int i = n; i>=1; i--)//

不能反過來,因為,要在已知後面dp[i][k]+dp[k+1][j]的情況下推得

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

for(int k = i; k <= j - 1; k++)

dp[i][j] = min(dp[i][j], dp[i][k]+dp[k+1][j]+s[j]-s[i-1

]); cout

<1

][n];

return0;

}

DP 合併石子

矩陣連乘求最小相乘次數的問題和石子合併的問題思路是一樣的,而二者都是典型的dp 石子合併的問題 問題描述 在一條直線上有n堆石子,每堆有一定的數量,每次可以將兩堆相鄰的石子合併,合併後放在兩堆的中間位置,合併的費用為兩堆石子的總數。求把所有石子合併成一堆的最小花費。輸入格式 輸入第一行包含乙個整數n...

dp 合併石子

靈活的dp啊。靈活的思路啊。怎樣去分析乙個你認為是用簡單dp解決的問題呢。就是把問題盡量想得簡單一點。舉個例子,把大象放進冰箱分為幾步 把大象的頭放進冰箱,把大象的尾巴放進冰箱。都是同樣的 放進冰箱 的操作,涉及的資料的規模變小了,這樣 步驟簡化 就可以有點思路。回到說這道題 你合併這11堆石子,你...

石子合併 DP

題目 在乙個操場上一排地擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。請設計乙個程式,計算出將n堆石子合併成一堆的最小得分。輸入每組資料第1行為乙個正整數n 2 n 100 以下n行,每行乙個正整數,小於10000,分...