動態規劃之最優矩陣連乘

2021-06-08 13:03:16 字數 865 閱讀 3971

最優矩陣連乘

問題描述:

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

**:

#include using namespace std;

#define n 105

int c[n][n],s[n][n],p[n];

int chain(int i,int j)

{ if(c[i][j]>0)return c[i][j];

if(i==j)return 0;

int u=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(i=0;i<=n;i++)

cin>>p[i];

cout<

矩陣連乘(動態規劃)

題目描述 給定n個矩陣 a1,a2,an 其中ai與ai 1是可乘的,i 1,2 n 1。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。例如 a1 a2 a3 a4 a5 a6 最後的結果為 a1 a2a3 a4a5 a6 最小的乘次為15125。思路 動態規劃演算...

動態規劃 矩陣連乘

includeusing namespace std 無論括號怎麼分這些連續相乘的矩陣,最後括號都可以歸結到只有兩對括號,把整個連乘的矩陣分成兩部分 0 i j m i j min i 遞迴計算矩陣連乘 int liancheng int i,int j,int p,int s return min...

動態規劃 矩陣連乘

動態規劃常常用來解決,具有最優子結構,重疊子問題的物件。最優子結構 即通過分析問題,將問題分解為多個子問題。然後每個子問題繼續分解為更多子問題。從底往上求出最有值,由最優值確定最優解。重疊子問題 在計算過程中不同子問題可能都會計算某個值。若每個子問題都去求解同乙個值,浪費時間。動態規規劃對每乙個子問...