破n环为2*n链,
答案在每个长度为n的区间选择出最值
能量项链
P1063 [NOIP2006 提高组] 能量项链 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<iostream>
using namespace std;
int n;
int a[201],b[201];
int dp[201][201];
void solu(){
for(int i=1;i<=2*n;i++){
dp[i][i]=0;
for(int j=i+1;j<=2*n;j++){
dp[i][j]=0;
}
}
for(int len=2;len<=2*n;len++){
for(int i=1;i+len-1<=2*n;i++){
int j=i+len-1;
for(int k=i;k<=j-1;k++){
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i]*a[k+1]*b[j]);
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,dp[i][i+n-1]);
}
cout<<ans;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i+n]=a[i];
}
for(int i=1;i<=n;i++){
b[i]=a[i+1];
b[i+n]=b[i];
}
solu();
}