diff --git a/mcm.cpp b/mcm.cpp new file mode 100644 index 0000000..8829a60 --- /dev/null +++ b/mcm.cpp @@ -0,0 +1,32 @@ +#include +using namespace std; + +int mcm_memo(vector &arr, int si, int ei, vector> &dp) +{ + if (ei - si == 1) + { + return dp[si][ei] = 0; + } + + if (dp[si][ei] != 0) + { + return dp[si][ei]; + } + + int minRes = (int)1e9; + for (int i = si + 1; i < ei; i++) + { + int leftRes = mcm_memo(arr, si, i, dp); + int rightRes = mcm_memo(arr, i, ei, dp); + + minRes = min(minRes, leftRes + arr[si] * arr[i] * arr[ei] + rightRes); + } + dp[si][ei] = minRes; + return minRes; +} + +int matrixMultiplication(vector &arr, int n) +{ + vector> dp(n, vector(n , 0)); + return mcm_memo(arr, 0, n-1, dp); +}