题目
思路跟合并石子一毛一样呢

#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;
}