最優矩陣鏈乘

2021-08-03 02:58:18 字數 983 閱讀 8517

題目大意:

乙個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]。

基本思路:

然後就是誰和誰先結合的問題,然後每一小的結合部分又存在誰和誰先結合的問題,這是很明顯的最優子結構 ,然後很明顯用記憶化搜尋更為簡單易懂,然後就是附上**以及注釋;

**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

const int maxn = 100+10;

int p[maxn],dp[maxn][maxn],s[maxn][maxn];

int chain(int i,int j)

{if(dp[i][j]) return dp[i][j];//套路;

if(i==j) return 0;//套路;

int v=chain(i,i)+chain(i+1,j)+p[i-1]*p[i]*p[j];

s[i][j]=i;

for(int k=i+1;k>n;

for(int i=0;i<=n;i++) cin>>p[i];

cout<

最優矩陣鏈乘

問題描述 乙個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...

最優矩陣鏈乘

我們都學過矩陣的乘法。矩陣的乘法不滿足分配率,但是滿足結合律,因此矩陣 a b c 和 a b c 的結果是一樣的,但是中間的運算量可能是不同的。比如三個矩陣 a 2 times3 b 3 times4 c 4 times5 則 a times b times c 需要運算 2 times3 tim...

最優矩陣鏈乘 動態規劃

給定n個矩陣 a1,a2,an 其中ai與ai 1是可乘的,i 1,2 n 1。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。解答 我們按照動態規劃的幾個步驟來分析 1 找出最優解的性質,刻畫其特徵結構 對於矩陣連乘問題,最優解就是找到一種計算順序,使得計算次數最少...