From 3ce4138213cc6eec8c7c0c5d880521712e28ef9e Mon Sep 17 00:00:00 2001 From: Vanshika Nehra <72328934+VanshikaNehra23@users.noreply.github.com> Date: Sat, 2 Oct 2021 23:31:24 +0530 Subject: [PATCH] Create matrix_chain_multiplication.cpp --- .../matrix_chain_multiplication.cpp | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Dynamic Programing/matrix_chain_multiplication.cpp diff --git a/Dynamic Programing/matrix_chain_multiplication.cpp b/Dynamic Programing/matrix_chain_multiplication.cpp new file mode 100644 index 00000000..9ab88c2c --- /dev/null +++ b/Dynamic Programing/matrix_chain_multiplication.cpp @@ -0,0 +1,42 @@ +// C++ program using memoization +#include +using namespace std; +int dp[100][100]; + +// Function for matrix chain multiplication +int matrixChainMemoised(int* p, int i, int j) +{ + if (i == j) + { + return 0; + } + if (dp[i][j] != -1) + { + return dp[i][j]; + } + dp[i][j] = INT_MAX; + for (int k = i; k < j; k++) + { + dp[i][j] = min( + dp[i][j], matrixChainMemoised(p, i, k) + + matrixChainMemoised(p, k + 1, j) + + p[i - 1] * p[k] * p[j]); + } + return dp[i][j]; +} +int MatrixChainOrder(int* p, int n) +{ + int i = 1, j = n - 1; + return matrixChainMemoised(p, i, j); +} + +// Driver Code +int main() +{ + int arr[] = { 1, 2, 3, 4 }; + int n = sizeof(arr) / sizeof(arr[0]); + memset(dp, -1, sizeof dp); + + cout << "Minimum number of multiplications is " + << MatrixChainOrder(arr, n); +}