题目
思路跟合并石子一毛一样呢
#include <cstdio>
#include <iostream>
using namespace std;
int n;
int a[1000],f[1000][1000];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
a[i]=x;
a[i+n]=x;//模拟环形
}
for(int p=1;p<=n;p++)//长度
for(int i=1;i<=2*n-p;i++)//两倍长度,模拟环形,起点
{
int j=i+p;//终点
for(int k=i;k<=j-1;k++)
{
f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1]);//状态转移方程
}
}
int max1=-1;
for(int i=1;i<=n;i++)
max1=max(max1,f[i][n+i-1]);
printf("%d",max1);
return 0;
}