#include <bits/stdc++.h>
using namespace std;
int n;
int m[100][100],s[100][100];
int p[100];
int dp()
{
memset(m,0,sizeof(m));
memset(s,0,sizeof(s));
for(int r=2;r<=n;++r)
{
for(int i=1;i<=n-r+1;++i)
{
int j = i+r-1;
m[i][j] = m[i+1][j] + p[i-1]*p[i]*p[j];
s[i][j] = i;
for(int k=i+1;k<j;++k)
{
int t = m[i][k]+m[i][k+1]+p[i-1]*p[k]*p[j];
if(t<m[i][j])
{
m[i][j]=t;
s[i][j]=k;
}
}
}
}
return m[1][n];
}
void print(int i,int j)
{
if(i==j)
{
printf("A[%d]",i);
return ;
}
printf("(");
print(i,s[i][j]);
print(s[i][j]+1,j);
printf(")");
}
int main()
{
printf("输入矩阵个数:");
cin >> n;
printf("矩阵的高度以及最后结果的宽度\n");
for (int i = 0; i <= n; ++i)
{
cin >> p[i];
}
printf("最小乘法次数:%d\n",dp());
print(1, n);
system("pause");
}