for(int i=n*2-1;i>=1;i--)
{
for(int j=i+1;j<2*n&&j-i<n;j++)
{
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]);
}
s=max(s,f[i][j]);
}
}
for(int len=2;len<=n;len++)
{
for(int i=1;i<=2*n-1-len;i++)
{
int j=len+i-1;
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]);
}
s=max(s,f[i][j]);
}
}
#include <queue>
#include <cmath>
#include <cctype>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <algorithm>
using namespace std;
int a[201];
int f[201][201];
int main()
{
int n,s=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[n+i]=a[i];
}
for(int i=n*2-1;i>=1;i--)
{
for(int j=i+1;j<2*n&&j-i<n;j++)
{
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]);
}
s=max(s,f[i][j]);
}
}
printf("%d",s);
return 0;
}
还有他这篇题解中的f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1]);
要怎么理解呢?