信息
- ID
- 230
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 139
- 已通过
- 69
- 上传者
#include <iostream>
using namespace std;
const int N=1e3+10;
struct node{
int bg;
int ed;
}a[N];
int b[N],dp[N][N];
int main(){
int n;cin>>n;
for(int i=1;i<=n;i++){
cin>>b[i];
b[i+n]=b[i];
}
for(int i=1;i<2*n;i++){
a[i].bg=b[i],a[i].ed=b[i+1];
}
a[2*n].bg=b[2*n],a[2*n].ed=b[1];
for(int i=2*n-1;i>=1;i--){
for(int j=i+1;j<=2*n&&j-i+1<=n;j++){
for(int k=i;k<j;k++){
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+a[i].bg*a[k].ed*a[j].ed);
}
}
}
int mx=0;
for(int i=1;i<=n;i++){
mx=max(mx,dp[i][i+n-1]);
}
cout<<mx<<endl;
return 0;
}