区间dp
cpp
void solve(){
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>w[i],w[i+n]=w[i];
for(int len=1;len<=n+1;len++){
for(int l=1;l+len-1<=2*n;l++){
int r=l+len-1;
for(int k=l+1;k<r;k++){
f[l][r]=max(f[l][r],f[l][k]+f[k][r]+w[l]*w[r]*w[k]);
}
}
}
ll ans=0;
for(int i=1;i<=2*n;i++)ans=max(ans,f[i][i+n]);
cout<<ans;
}