#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=5000+10;
int p[maxn],f[maxn][maxn];
int main()
{
int n,x,y,j;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&x,&y);
if(i==n) {p[i]=x;p[i+1]=y;}
else p[i]=x;
}
for(int i=1;i<=n;i++) f[i][i]=0;
for(int r=2;r<=n;r++)
{
for(int i=1;i<=n-r+1;i++)
{
j=i+r-1;
f[i][j]=f[i+1][j]+p[i]*p[i+1]*p[j+1];
for(int k=i+1;k<j;k++)
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+p[i]*p[k+1]*p[j+1]);
}
}
printf("%d\n",f[1][n]);
return 0;
}
矩阵链乘
最新推荐文章于 2022-07-04 17:37:40 发布