Print Matrix Chain Multiplication | C++ | Explained
int dp[501][501];

// cuts[i][j] stores the optimal position to cut the array considering elements i to j
int cuts[501][501];

int MCM(int s, int e, int v[]){

	if(s==e-1) return 0;
	else if(dp[s][e]!=-1) return dp[s][e];

	int ans = INT_MAX;
	for(int k=s+1;k<=e-1;k++)
		ans = min(ans, MCM(s, k, v) + MCM(k, e, v) + v[s]*v[k]*v[e] );

	return dp[s][e] = ans;
	
}

char name = 'A';
void PrintMCM(int s, int e){
	if(s==e-1){
		cout<<name++;
		return;
	}
	cout<<'(';
	PrintMCM(s, cuts[s][e]);
	PrintMCM(cuts[s][e] + 1, e);
	cout<<')';
}
Comments (0)