版权声明: https://blog.csdn.net/nwpu2017300135/article/details/81561965
https://www.luogu.org/problemnew/show/P1063
题解:区间DP,环可以通过复制一份接在后面转化成链进行DP;
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int a[205];
int dp[205][205];
int main()
{
int n,i,j,k;
int maxn=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
a[n+i]=a[i];
}
for(i=2;i<2*n;i++){
for(j=i;j>=1&&i-j<n;j--){
for(k=j;k<i;k++){
dp[j][i]=max(dp[j][i],dp[j][k]+dp[k+1][i]+a[j]*a[i+1]*a[k+1]);
if(dp[j][i]>maxn)maxn=dp[j][i];
}
}
}
cout << maxn << endl;
return 0;
}