记忆化搜索80分,求调,QwQ
#include<bits/stdc++.h>
using namespace std;
struct node{
long long tou,wei,data=0;
}p[201][201];
long long n;
void dfs(long long x,long long y){
if(x==y) return ;
if(p[x][y].data) return ;
for(long long i=x;i<y;i++){
dfs(x,i);
dfs(i+1,y);
if(p[x][y].data<p[x][i].data+p[i+1][y].data+p[x][i].tou*p[x][i].wei*p[i+1][y].wei){
p[x][y].data=p[x][i].data+p[i+1][y].data+p[x][i].tou*p[x][i].wei*p[i+1][y].wei;
p[x][y].tou=p[x][i].tou;
p[x][y].wei=p[i+1][y].wei;
}
}
}
int main(){
cin>>n;
for(long long i=1;i<=n;i++){
cin>>p[i][i].wei;
p[i][i].tou=p[i-1][i-1].wei;
p[i+n][i+n]=p[i][i];
}
p[1][1].tou=p[n][n].wei;
long long maxn=0;
for(long long i=1;i<n;i++){
dfs(i,i+n-1);
maxn=max(maxn,p[i][i+n-1].data);
}
cout<<maxn;
return 0;
}