50 lines
700 B
C++
50 lines
700 B
C++
#include <cstdio>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
using namespace std;
|
|
|
|
int N,
|
|
Answer = 0,
|
|
A [300],
|
|
F [300][300];
|
|
|
|
int dfs(int i,int j){
|
|
|
|
if(F[i][j])
|
|
return F[i][j];
|
|
|
|
if(j - i == 1)
|
|
return 0;
|
|
|
|
for(int k=i+1;k<j;k++){
|
|
|
|
int Temp = dfs(i,k)+dfs(k,j)+A[i]*A[k]*A[j];
|
|
F[i][j] = max(Temp,F[i][j]);
|
|
|
|
}
|
|
|
|
return F[i][j];
|
|
|
|
}
|
|
|
|
int main(int argc,char ** argv){
|
|
|
|
//freopen("energy.in","r",stdin);
|
|
//freopen("energy.out","w",stdout);
|
|
|
|
scanf("%d",&N);
|
|
|
|
for(int i=1;i<=N;i++){
|
|
|
|
scanf("%d",&A[i]);
|
|
A[i + N] = A[i];
|
|
|
|
}
|
|
|
|
for(int i=1;i<=N;i++)
|
|
Answer = max(Answer,dfs(i,i+N));
|
|
|
|
printf("%d",Answer);
|
|
|
|
}
|
|
|