fork download
  1. #include <iostream>
  2. #include <limits.h>
  3. using namespace std;
  4.  
  5. int MatrixChainOrder2(int p[], int n){
  6. int **m = new int* [n + 1];
  7. int **s = new int* [n + 1];
  8. for(int i = 0; i < n + 1; i++){
  9. m[i] = new int [n];
  10. s[i] = new int [n];
  11. }
  12.  
  13. for (int i = 1; i < n + 1; i++)
  14. m[i - 1][i - 1] = 0;
  15. for(int i = 0; i < n + 1; i++)
  16. for(int j = 0; j < n + 1; j++){
  17. m[i][j] = 0;
  18. s[i][j] = 0;
  19. }
  20.  
  21. for(int L = 2; L < n; L++){
  22. for(int i = 1; i < n - L + 1; i++){
  23. int j = i + L - 1;
  24. m[i - 1][j - 1] = INT_MAX;
  25. for(int k = i; k < j - 1; k++){
  26. int q = m[i - 1][k - 1] + m[k + 1 - 1][j - 1] + p[i - 1 - 1] * p[k - 1] * p[j - 1];
  27. if(q < m[i - 1][j - 1]){
  28. m[i - 1][j - 1] = q;
  29. s[i - 1][j - 1] = k;
  30. }
  31. }
  32. }
  33. }
  34.  
  35. // Печать матриц
  36. for(int i = 0; i < n + 1; i++){
  37. for(int j = 0; j < n + 1; j++)
  38. std::cout << m[i][j] << " ";
  39. std::cout << std::endl;
  40. }
  41. std::cout << std::endl << std::endl;
  42. for(int i = 0; i < n + 1; i++){
  43. for(int j = 0; j < n + 1; j++)
  44. std::cout << s[i][j] << " ";
  45. std::cout << std::endl;
  46. }
  47.  
  48. return m[1][n];
  49. }
  50.  
  51. int main() {
  52. const int n = 10;
  53. int p[n] = {10, 50, 30, 7, 25, 60, 15, 80, 55, 30};
  54. int cost = 0;
  55.  
  56. std::cout << std::endl << MatrixChainOrder2(p, n - 1) << std::endl;
  57. return 0;
  58. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
0 2147483647 -445715013 -1320904071 -486260720 -972508838 567208250 -1904090449 0 0 
0 0 2147483647 -2147480149 -2147433649 -2147351049 -2147447874 -2147172849 0 0 
0 0 0 2147483647 -2147446149 -2147381049 -2147455374 -2147212849 0 0 
0 0 0 0 2147483647 -2147471049 -2147477874 -2147332849 0 0 
0 0 0 0 0 2147483647 -2147481024 -2147349649 0 0 
0 0 0 0 0 0 2147483647 -2147363649 0 0 
0 0 0 0 0 0 0 2147483647 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 


0 0 1 1 3 3 5 1 0 0 
0 0 0 2 2 2 2 2 0 0 
0 0 0 0 3 3 3 3 0 0 
0 0 0 0 0 4 4 4 0 0 
0 0 0 0 0 0 5 5 0 0 
0 0 0 0 0 0 0 6 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 

0