動態規劃 矩陣連乘

2021-08-13 02:12:11 字數 1081 閱讀 1123

#includeusing namespace std;

//無論括號怎麼分這些連續相乘的矩陣,最後括號都可以歸結到只有兩對括號,把整個連乘的矩陣分成兩部分

// / 0 i==j

//m[i][j] =

// \ min i//遞迴計算矩陣連乘

int liancheng(int i, int j, int *p, int **s)

}return min;

}int matrixchain(int *p, int n, int **m, int **s) }}

}return m[1][n];

}//求最優解,求出加括號的位置

void traceback(int i, int j, int **s)

//列印s陣列,記錄每個位置加括號的位置

void prints(int **s)

cout<}

}int main()

;//用來存放每個矩陣的行和列數,第乙個矩陣的行列為p[0][1], 第二個為p[1][2],第三

//個為p[2][3],依此類推

int **m; //傳遞二級指標的時候,這樣做,直接int m,無法把m當作二級指標引數傳進去

m = (int **)new int[7];

for (int i = 0; i < 7; i++)

int **s;

s = (int **)new int[7];

for(int i=0; i<7; i++)

s[i] = (int *)new int[7];

cout << "遞迴結果: " << liancheng(1, 6, p, s) << endl;

traceback(1, 6, s);

for(int i=1; i<=6; i++) //清空s陣列

for(int j=1; j<=6; j++)

s[i][j] = 0;

cout << "動態規劃結果: "

return 0;

}

矩陣連乘(動態規劃)

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

動態規劃 矩陣連乘

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

矩陣連乘 動態規劃

將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來,讓以後再次遇到時直接引用答案,不必重新求解。給定n個矩陣 a1,a2,an,其中ai與ai 1是可乘的,i 1,2.n 1。確定計算...