#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
using namespace std;
int d[105][105],s[105];
int r()
{
char ch;
do
{
ch=getchar();
}while(ch!='-'&&(ch<'0'||ch>'9'));
int ans=0,f=0;
if(ch=='-') f=1; else ans=ch-'0';
while(isdigit(ch=getchar())) ans=ans*10+ch-'0';
if(f) ans*=-1;
return ans;
}
int dp(int z,int y)
{
if(d[z][y]!=0xffffff) return d[z][y];
for(int k=z;k<=y;k++)
if(dp(z,k)+dp(k+1,y)+s[z]*s[k+1]*s[y+1]<d[z][y])
d[z][y]=d[z][k]+d[k+1][y]+s[z]*s[k+1]*s[y+1];
return d[z][y];
}
int main()
{
int n;
n=r();
for(int i=1;i<=n;i++)
s[i]=r();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j]=0xffffff;
for(int i=1;i<=n;i++) //注意边界
d[i][i]=0;
printf("%d",dp(1,n-1));
return 0;
}
例题9-7 最优矩阵链乘
最新推荐文章于 2022-11-20 14:40:32 发布