#include <iostream>
using namespace std;
void MatrixMul(int *p,int n,int**m ,int **s)///p记录矩阵维数,m最少乘法次数,s分法
{
for(int i=0;i<n;i++)
m[i][i]=0;
for(int r=1;r<n;r++)
for(int i=0;i<n-r;i++)
{
int j=i+r;
m[i][j]=m[i+1][j]+p[i]*p[i+1]*p[j+1];
s[i][j]=i;
for(int k=i+1;k<j;k++)
{
int t=m[i][k]+m[k+1][j]+p[i]*p[k]*p[j+1];
if(t<m[i][j])
{
m[i][j]=t;
s[i][j]=k;
}
}
}
}
int main()
{
int *p,**m,**s,n;
cin>>n;
m=new int*[n];
s=new int*[n];
for(int i=0;i<n;i++)
{
m[i]=new int[n];
s[i]=new int[n];
}
p=new int[n+1];
for(int i=0;i<n+1;i++)
cin>>p[i];
MatrixMul(p,n,m ,s);
cout<<m[0][n-1]<<endl;
return 0;
}
动态规划——矩阵连乘
最新推荐文章于 2020-12-25 18:40:44 发布