看着就觉得想DP对吧。
环状的就在后面复制一遍就好了。
方程:
fi,j
表示从
i
合并到了
gi 表示输入的第 i 个数
代码如下:
#define N 500
int n,j,ans,f[N][N],g[N];
int main()
{
n=read();
fr(i,1,n)
g[i]=g[i+n]=read();
fr(o,2,n)
fr(i,1,n+n-o+1)
{
j=i+o-1;
fr(k,i,j-1)
f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+g[i]*g[k+1]*g[j+1]);
}
fr(i,1,n)
ans=max(ans,f[i][i+n-1]);
printf("%d\n",ans);
return 0;
}