最優矩陣連乘

2021-09-11 18:53:24 字數 852 閱讀 4632

乙個n*m矩陣由n行m列共n*m個數排列而成。兩個矩陣a和b可以相乘當且僅當a的列數等於b的行數。乙個n*m的矩陣乘以乙個m*p的矩陣等於乙個n*p的矩陣,運算量為nmp。

矩陣乘法滿足結合律,a*b*c可以表示成(a*b)*c或者是a*(b*c),兩者的運算量卻不同。例如當a=2*3 b=3*4 c=4*5時,(a*b)*c=64而a*(b*c)=90。顯然第一種順序節省運算量。

現在給出n個矩陣,並輸入n+1個數,第i個矩陣是a[i-1]*a[i]

第一行n(n<=100)

第二行n+1個數

最優的運算量

2 3 4 5

64
思路:

dp[i][j]表示i和j之間的最小代價。

dp[i][j] = min(dp[i][k] + dp[k][j] + a[i] * a[k] * a[j]); i < k < j;

先計算距離為2的,然後距離為3的,漸次增加。

#include #include #include using namespace std;  

const int maxn = 110;

const int inf = 0x3f3f3f3f;

int n, a[maxn], dp[maxn][maxn];

int main()

memset(dp, 0, sizeof(dp));

for (int r = 2; r <= n; r++)

}} printf("%d\n", dp[0][n]);

return 0;

}

最優矩陣連乘

time limit 1 ms memory limit 128 mb difficulty 3 乙個n m矩陣由n行m列共n m個數排列而成。兩個矩陣a和b可以相乘當且僅當a的列數等於b的行數。乙個n m的矩陣乘以乙個m p的矩陣等於乙個n p的矩陣,運算量為nmp。矩陣乘法滿足結合律,a b c...

最優矩陣連乘問題

1.引言 多矩陣連乘 對於一般的矩陣乘法來說,如矩陣a m,n 與矩陣b n,p 相乘需要進行的加法次數為m n p次乘法。由於矩陣乘法滿足結合律,因此矩陣相乘的結合性,會影響整個計算表示式的乘法執行次數。如下面的例子,其中a 10,5 b 5,20 c 20,3 1 ab c 執行乘法次數為130...

矩陣連乘c 最優值

include include define n 20 void matrixchain int p n int n,int m n n int s n n 矩陣個數從兩個開始一次遞增 for r 2 r n r int main void 儲存矩陣的行和列陣列 int m n n 儲存矩陣與矩陣相...