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 }
结果:
参考: