通过修改边界条件的形式(即拿下一位作为尾部)代替pair类型实现优化
#include<bits/stdc++.h>
using namespace std;
long long dp[202][202],a[202];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],a[i+n]=a[i];
for(int len=3;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++){
dp[l][r]=max(dp[l][r],dp[l][k]+dp[k][r]+a[l]*a[r]*a[k]);
}
}
}
long long ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,dp[i][i+n]);
}
cout<<ans<<endl;
}