問題描述:
給定n個矩陣的鏈
,a2,
...,
an>
,矩陣 a
i 的規模為 p
i×pi
+1(1
≤i≤n
) ,求完全括號化的方案,使得計算乘積 a
1,a2
,...
,an 所需標量乘法的次數最少。
遞推式: m
[i,j
]=,if i=
jif
i
#include
#include
#include
using
namespace
std;
const
int n=6;
const
int msize[6][2]=,,,,,};
const
int p[7]=;//the size of matrix: eg. matrix[0]=30*35; matrix[i]=p[i]*p[i+1]
int m[n][n];//m[i][j]=m[i][k]+m[k+1][j]+p[i]*p[k+1]*p[j+1]
vector
< vector
> s(n);//store the split position
void matrix_chain_order(const
int p,int n)
}
}
}
}int look_up_chain(vector
< vector
> &m,vector
< vector
> &s,const
int p,int i,int j)
else
//帶備忘機制的動態規劃
int memorized_matrix_chain(const
int p,int n)
void print_optimal_parens(vector
< vector
> & s,int i, int j)
}int main()用於實驗的例子:
結果應為:((
a1(a
2a3)
)((a
4a5)
a6))
執行過程:
執行結果:
矩陣鏈乘問題
輸入 共兩行第一行 n 1 n 100 代表矩陣個數。第二行有 n 1 個數,分別為 a1 a2 an 1 1 ak 2000 ak 和 ak 1 代表第 k 個矩陣是個 ak x ak 1 形的。輸出 共兩行 第一行 m 為最優代價。注 測試用例中 m 值保證小於 2 31 第二行為最優順序。如 ...
最優矩陣鏈乘
問題描述 乙個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...
最優矩陣鏈乘
題目大意 乙個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...