一个dp提耗费我怎么久。
把长度搞混了。
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<vector> #include<queue> #include<math.h> using namespace std; int n,a[209],f[200][200],maxn; int main() { scanf("%d",&n); int c; for(int i=1;i<=n;i++) { scanf("%d",&c); a[i]=c; a[n+i]=c; } a[n+n+1]=a[1]; for(int j=1;j<n;j++)//循环到n-1就够了 for(int i=1;i+j<=n+n;i++) for(int k=i;k<i+j;k++)//从i到i+j。j长为n-1 f[i][i+j]=max((f[i][k]+f[k+1][i+j]+a[i]*a[k+1]*a[j+i+1]),f[i][i+j]); for(int i=1;i<=n;i++) maxn=max(f[i][i+n-1],maxn); cout<<maxn; /* for(int j=0;j<=n;j++,cout<<endl) for(int i=1;i+j<=n+n;i++) printf("%d %d %d* ",i,i+j,f[i][i+j]); */ return 0; }