这是10分代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,a[10000001],dp[5000][5000];
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
a[i+n]=a[i];
}
for(int len=1;len<=n;len++){
for(int i=1;i+len<=2*n;i++){
int j=len+i;
for(int k=i+1;k<j;k++){
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i]*a[k]*a[j]);
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(dp[i][i+n],ans);
}
printf("%lld",ans);
return 0;
}
把状态转移方程里的 dp[k+1][j] 改成 dp[k][j] 就A了 但是我不是很理解 求解答