Skip to content

Commit 75eb368

Browse files
committed
add new dp code
1 parent 25f2a07 commit 75eb368

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

a.out

-28.6 KB
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// https://www.geeksforgeeks.org/dynamic-programming-set-8-matrix-chain-multiplication/
2+
#include <bits/stdc++.h>
3+
using namespace std;
4+
5+
int matrixOrder(int p[], int i, int j){
6+
if(i == j) return 0;
7+
int k, minn = INT_MAX, count;
8+
9+
for(int k=i;k<j;k++){
10+
count = matrixOrder(p,i,k) + matrixOrder(p,k+1,j) + p[i-1]*p[k]*p[j];
11+
if(count < minn)
12+
minn = count;
13+
}
14+
return minn;
15+
}
16+
17+
int matrixOrderDP(int p[], int n){
18+
int m[n+1][n+1];
19+
for(int i=1;i<n;i++)
20+
m[i][i] = 0;
21+
22+
for(int l=2;l<n;l++){
23+
for(int i=1;i<n-l+1;i++){
24+
int j=i+l-1;
25+
m[i][j] = INT_MAX;
26+
for(int k=i;k<j;k++){
27+
int q = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
28+
if(q < m[i][j])
29+
m[i][j] = q;
30+
}
31+
}
32+
}
33+
return m[1][n-1];
34+
}
35+
36+
int main(){
37+
int p[] = {1,2,3,4};
38+
int n = sizeof(p)/sizeof(p[0]);
39+
// int res = matrixOrder(p, 1, n-1);
40+
int res = matrixOrderDP(p,n);
41+
cout << res << endl;
42+
return 0;
43+
}

0 commit comments

Comments
 (0)