#include<iostream>
using namespace std;
void MATCHAIN(int r[],int n,int iLast)
{
r[n+1]=iLast;
int i,j,d,k;
int C[100][100];
for(i=1;i<=n;i++) //填充对角线d0
C[i][i]=0;
for(d=1;d<=n-1;d++)//填充对角线d1到dn-1
for(i=1;i<=n-d;i++)//填充对角线di的项目
{
j=i+d;
C[i][j]=10000000;
for(k=i+1;k<=j;k++)//根据公式计算C[i][j]
{
if( C[i][j] > (C[i][k-1]+C[k][j]+r[i]*r[k]*r[j+1]) )
C[i][j]=C[i][k-1]+C[k][j]+r[i]*r[k]*r[j+1];
}
}
for(i=1;i<=n;i++)
{
{
for(d=1;d<i;d++)
cout<<" ";
for(j=i;j<=n;j++)
cout<<C[i][j]<<" ";
}
cout<<endl;
}
cout<<"最少乘法次数为 "<<C[1][n]<<"次"<<endl;
}
int main(int argc, char* argv[])
{
int iNumber;
int *Matrix=new int [iNumber+1];
cout<<"请输入矩阵的个数"<<endl;
cin>>iNumber;
cout<<"请输入各个矩阵的维数"<<endl;
for(int i=1;i<=iNumber;i++)
cin>>Matrix[i];
cout<<"请输入最后一个矩阵的列数"<<endl;
cin>>Matrix[iNumber+1];
MATCHAIN(Matrix,iNumber,Matrix[iNumber+1]);
return 0;
}