dp[i][j] i j代表矩阵的边 dp[i][j]等于乘法次数
状态转移:dp[i][j]=min(dp[i][k]+dp[k][j]+p[i]*p[k]*p[j])
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int a[105];
int dp[105][105];
int main(){
int n;
while(scanf("%d",&n)==1){
for(int i=1;i<=n;i++)scanf("%d",&a[i]);//输入矩阵
memset(dp,0,sizeof(dp));
for(int len=2;len<n;len++){//先算出小的区间 然后用小的算出大的
for(int i=1;i<=n-len;i++){
int j=i+len;
for(int k=i+1;k<j;k++){
if(dp[i][j]==0)
dp[i][j]=dp[i][k]+dp[k][j]+a[i]*a[j]*a[k];
else dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[i]*a[j]*a[k]);
}
}
}
cout<<dp[1][n]<<endl;
}
return 0;
}