dp矩陣鏈乘法

2021-10-07 02:44:34 字數 801 閱讀 1051

dp矩陣鏈乘法

矩陣a和b可乘的條件是矩陣a的列數等於矩陣b的行數。

給定n個矩陣{a1,a2,…,an},其中ai與ai+1是可乘的,i=1,2 ,…,n-1。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。

輸入描述:首先輸入乙個n,表示幾個矩陣。換行輸入矩陣。

輸出描述先輸出矩陣乘積次數之後輸出最優相乘情況。;

輸入示例

63 5 4 6 7 8 3

輸出示例

462((a1a2)(a3(a4(a5a6))))

#include

#include

using

namespace std;

int p[

101]

;int m[

101]

[101];

int s[

101]

[101];

void

matrixchain

(int

*p,int n,

int m[

101]

,int s[

101])}

}}}void

traceback

(int i,

int j,

int s[

101])}

intmain()

矩陣鏈乘法 DP

矩陣鏈乘法是這樣的問題 給定n個矩陣 a1,a2,an,其中ai與ai 1是可乘的,i 1,2 n 1。確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。輸入資料為矩陣個數和每個矩陣規模,輸出結果為計算矩陣連乘積的計算次序和最少數乘次數。我們稱有如下性質的矩陣乘積鏈為完全括...

區間dp 石子合併 矩陣鏈乘法

有n堆石子圍成乙個圈,每一堆石子可以和相鄰的一堆合併得到新的一堆,所得的分數是新的一堆的數量。所有的石子合併成一堆後,最大的分數,最小的分數是多少。這是乙個環,需要拆分成鏈,把這n堆,複製一遍,變成2n堆。dp的時候還是得保證長度為n。dp min i j 表示合併i j這個區間所得到的最小的分數。...

矩陣鏈乘法

設m i j 為計算矩陣ai.j所需標量乘法運算次數的最小值。對整個問題計算ai.n的最小代價就是m i,n 使用輔助表是s 1.n,1.n 來記錄計算m i,j 時取得最優代價處k的值。k是裂開的位置。include define n 6 void matrix int p,int m n 1 i...