乙個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個數
最優的運算量
32 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 儲存矩陣與矩陣相...