石子合併 DP

2021-09-02 18:41:55 字數 935 閱讀 2626

題目:

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

輸入每組資料第1行為乙個正整數n(2<=n<=100),以下n行,每行乙個正整數,小於10000,分別表示第i堆石子的個數(1<=i<=n)。

輸出對於每組資料輸出乙個正整數,即最小得分

樣例輸入713

781621418

樣例輸出

思路:這是石子歸併的簡化版本,石子處於一排。由於發現只能是相鄰的2堆石子進行歸併。我們會發現,貪心演算法在此處便失去作用,區域性最優解並不能帶來整體最優解。

因此,不難讓我們想到,此題應該採取dp(dynamic programing)來求其最優解。

動態規劃常常採取從部分整體最優解的拆分來得到最優解法的遞迴式,我們可以想到,此處是由2堆石子合併,所以最終最優解肯定是由兩個區域性最優解的加上整體的和求得。

動態轉移方程:

列舉邊界,然後列舉長度

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

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

printf("%d",f[1][n]);//輸出最終結果。

return 0; //完美地返回。

}

DP 合併石子

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

dp 合併石子

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

合併石子 dp

時間限制 1 sec 記憶體限制 128 mb 提交 7 解決 7 提交 狀態 討論版 命題人 quanxing 在乙個操場上一排地擺放著 堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。計算出將 堆石子合併成一堆的最小得分。第...