/**
* @author fizz pu
* @date 2020/10/11 下午18:25
* @version 1.0
* 失之毫釐,繆之千里!
*//**
* 題目描述
* 設有n堆沙子排成一排,其編號為1,2,3,…,n(n< =300)。每堆沙子有一定的數量,可以用乙個整數來描述,現在要將n堆沙子合併成為一堆,
* 每次只能合併相鄰的兩堆,合併的代價為這兩堆沙子的數量之和,合併後與這兩堆沙子相鄰的沙子將和新堆相鄰,
* 合併時由於選擇的順序不同,合併的總代價也不相同,如有4堆沙子分別為1 3 5 2我們可以先合併1、2堆,代價為4,
* 得到4 5 2又合併1,2堆,代價為9,得到9 2,再合併得到11,總代價為4+9+11=24,如果第二步是先合併2,3堆,則代價為7,
* 得到4 7,最後一次合併代價為11,總代價為4+7+11=22;問題是:找出一種合理的方法,使總的代價最小。輸出最小代價。
* 輸入
* 第一行乙個數n表示沙子的堆數n。 第二行n個數,表示每堆沙子的質量。 a[i]< =1000。
* 輸出
* 合併的最小代價。
* 樣例輸入
41 3 5 2
* 樣例輸出
22 */
// 分析,這道題目和矩陣矩陣連乘問題一樣
// 1.cost[n][n]中,cost[i][j] 表示合併i:j堆沙子需要的代價
// 2.初始化矩陣
// 2.1沙子只有一堆,代價為0
// 2.2沙子有兩堆,代價為數量之和
// 3 沙子有三堆以上,找出狀態轉移方程 cost[i][j] = cost[i][k] + cost[k+1][j] + i到j堆沙子的總和 ;迴圈找k
// 我的天啊!自己還是不小心!遇到個小錯誤
#include int getmincost(int*, int);
void dp(int *, int **);
int max(int, int);
int main()
std::coutsums = 0;
for(int m = row-1; m <= col-1; ++m)
if(i == 2) else}}
}return cost[0][len-1];
}
c 矩陣連乘的動態規劃演算法並輸出 矩陣連乘
問題描述 給定n個矩陣a1,a2,an,其中,ai與aj 1是可乘的,i 1,2,n l。你的任務是要確定矩陣連乘的運算次序,使計算這n個矩陣的連乘積a1a2 an時總的元素乘法次數達到最少。例如 3個矩陣a1,a2,a3,階分別為10 100 100 5 5 50,計算連乘積a1a2a3時按 a1...
動態規劃 矩陣連乘的問題
動態規劃 矩陣連乘的問題 問題的引出 看下面乙個例子,計算三個矩陣連乘 維數分別為10 100 100 5 5 50 按此順序計算需要的次數 a1 a2 a3 10x100x5 10x5x50 7500次 按此順序計算需要的次數 a1 a2 a3 10x5x50 10x100x50 75000次 所...
動態規劃 矩陣連乘的問題
問題的引出 看下面乙個例子,計算三個矩陣連乘 維數分別為10 100 100 5 5 50 按此順序計算需要的次數 a1 a2 a3 10x100x5 10x5x50 7500次 按此順序計算需要的次數 a1 a2 a3 10x5x50 10x100x50 75000次 所以問題是 如何確定運算順序...