Matrix Chain Optimal

  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4.  
  5. #define MAX 32767
  6.  
  7. void MatrixChainOrder(int *p)
  8. {
  9.   int n = 6; int q;
  10.   int m[6][6];
  11.   for (int i = 0; i < n; i++)
  12.     m[i][i] = 0;                // lowest layer's value is 0
  13.   for (int l = 2; l <= n; l++)  // l is the chain length.
  14.     for (int i = 0; i < n - l + 1; i++) {
  15.       int j = i + l - 1;
  16.       m[i][j] = MAX;
  17.       for (int k = i; k <= j - 1; k++) {
  18.           q = m[i][k] + m[k+1][j] + p[i]*p[k+1]*p[j+1];
  19.         if (q < m[i][j])
  20.           m[i][j] = q;
  21.       }
  22.     }
  23.   cout << m[1][4] << endl;
  24. }
  25.  
  26. int main()
  27. {
  28.   int p[7] = {30, 35, 15, 5, 10, 20, 25};
  29.   MatrixChainOrder(p);
  30.   return 0;
  31. }