能量项链
#include <bits/stdc++.h> using namespace std; //算法提高,能量项链,就是可以转圈的矩阵连乘问题 //把1->n扩展为1->n->n+1->2*n,然后对其进行dp,这样就循环起来了 int dp[2000][2000],n,a[1000],ans=0;//用i表示左维度,i+1表示右维度 int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; a[n+1]=a[1]; memset(dp,0, sizeof(dp)); //[,] //注意以l开始循环,如果以i的话,会导致直接算1->n,就错了 for(int l=1;l<=n;l++){ for(int i=1;i<=2*n-l+1;i++){ int j=l+i-1; for(int k=i;k<j;k++){ dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i>n?i-n:i]*a[j+1>n?j+1-n:j+1]*a[k+1>n?k+1-n:k+1]); } ans=max(ans,dp[i][j]); } } cout<<ans<<endl; return 0; }