#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cstring>
using namespace std;
long long dp[220][220],ans;
int n,arr[220];
int main()
{
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>arr[i];
arr[i+n]=arr[i];
}
for(int len=1;len<=n;++len)
{
for(int i=1;i<=2*n;++i)
{
int j=i+len;
if(j<=2*n)
{
for(int k=i+1;k<j;++k)
{
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]+arr[i]*arr[k]*arr[j]);
}
//printf("dp[%d][%d]=%d\n",i,j,dp[i][j]);
}
}
}
for(int i=1;i<=n;++i)
{
if(ans<dp[i][i+n])
ans=dp[i][i+n];
}
cout<<ans<<endl;
return 0;
}
洛谷—P1063 能量项链(区间DP)
最新推荐文章于 2021-06-13 11:21:20 发布