首页 > 技术文章 > 算法作业--动态规划-矩阵链相乘 实现算法7.2

fjnuczq 2020-12-25 10:51 原文

 1 #include<iostream>
 2 #include<iomanip>
 3 using namespace std;
 4 #define N 5
 5 #define MAXINT 65535
 6 int main() {
 7     int r[N + 1] = { 5,10,4,6,10,2 };
 8     int C[N][N] = { 0 };
 9     //对角线填充0
10     for (int i = 0; i < N; i++) {
11         C[i][i] = 0;
12     }
13     //填充对角线d1到dn-1
14     for (int d = 1; d < N; d++) {
15         for (int i = 0; i < N - d; i++) {
16             int j = i + d;
17             C[i][j] = MAXINT;
18             for (int k = i + 1; k <= j; k++) {
19                 int a = C[i][j];
20                 int b = C[i][k - 1] + C[k][j] + r[i] * r[k] * r[j + 1];
21                 C[i][j] = a <= b ? a : b;
22             }
23         }
24     }
25     for (int i = 0; i < N; i++) {
26         for (int j = 0; j < N; j++) {
27             cout << setw(4) << C[i][j];
28         }
29         cout << endl;
30     }
31     cout << endl << "最小乘法次数为:" << C[0][N - 1] << endl;
32     system("pause");
33     return 0;
34 }

结果:

 

 

参考:

动态规划之矩阵链相乘(matchain算法)

推荐阅读