Matrix-chain Multiplication
The goal of the matrix-chain multiplication problem is to find the most efficient way to multiply given n
matrices M1,M2,M3,...,Mn.
Write a program which reads dimensions of Mi
, and finds the minimum number of scalar multiplications to compute the maxrix-chain multiplication M1M2...Mn.
Input
In the first line, an integer n
is given. In the following n lines, the dimension of matrix Mi ( i=1...n) is given by two integers r and c which respectively represents the number of rows and columns of Mi.
Output
Print the minimum number of scalar multiplication in a line.
Constraints
- 1≤n≤100
1≤r,c≤100
Sample Input 1
6 30 35 35 15 15 5 5 10 10 20 20 25
Sample Output 1
15125
#include<bits/stdc++.h>
using namespace std;
const int N(100+10);
int p[N];
int m[N][N];
int main(){
freopen("in.txt","r",stdin);
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>p[i-1]>>p[i];
for(int d=2;d<=n;d++)
for(int i=1;i<=n-d+1;i++){
int j=i+d-1;
m[i][j]=(1<<21);
for(int k=i;k<=j-1;k++)
m[i][j]=min(m[i][j],m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]);
}
cout<<m[1][n]<<endl;
fclose(stdin);
}