#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。確定計算...