1. source codes #include <iostream> using namespace std; void matrixChainOrder(int p[], int n) { int *m = new int[n * n]; int *s = new int[n * n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { m[i * n + j] = 0; s[i * n + j] = 0; } } for (int l = 2; l <= n; l++) { for (int i = 1; i <= n - l + 1; i++) { int j = i + l - 1; m[i * n + j] = numeric_limits<int>::max(); for (int k = i; k <= j - 1; k++) { int q = m[i * n + k] + m[(k + 1) * n + j]+ p[i - 1] * p[k]*p[j]; if (q < m[i * n + j]) { m[i * n + j] = q; s[i * n + j] = k; } } } } cout << "the m matrix is "<< endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << m[i * n + j]<< " "; } cout << endl; } // cout << endl; // cout << "the s matrix is "<< endl; // for (int i = 0; i < n; i++) { // for (int j = 0; j < n; j++) { // cout << s[i * n + j]<< " "; // } // cout << endl; // } } int main() { int p[] = { 30, 35, 15, 5, 10, 20, 25 }; int n = sizeof(p)/ sizeof(int); matrixChainOrder(p, n); } 2. test result the m matrix is 0 0 0 0 0 0 0 0 0 15750 7875 9375 11875 15125 0 0 0 2625 4375 7125 10500 0 0 0 0 750 2500 5375 0 0 0 0 0 1000 3500 0 0 0 0 0 0 5000 0 0 0 0 0 0 0