最優矩陣連乘

2021-06-19 03:59:41 字數 934 閱讀 8305

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可以表示成(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個數

最優的運算量 3

2 3 4 5

64動態規劃

思路:動態規劃類題目,最優加括號結構, 今天剛看懂, 用乙個二維陣列儲存最

解, 

ans[i][j]為第i到第j個矩陣的最優加括號解, 最終要求的就是1到n的最優加括號解即

ans[1][n], 因為求大問題要借助子問題的解, 所以要從小到大依次求解。具體請參考最

優加括號演算法。

#include #include #include #define max 101

unsigned int ans[max][max], p[max], n; //數較大需要用無符號整形

int materixchain()

for(m = 2; m <= n; m++) //m: 矩陣個數

}} }

return ans[1][n];

}int main()

printf("%u\n", materixchain());

return 0;

}

最優矩陣連乘

乙個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 ...

最優矩陣連乘問題

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 儲存矩陣與矩陣相...