30 lines
604 B
ObjectPascal

var
n,i,j,k:longint;
max:int64;
a:array[-10..maxint] of int64;
f:array[1..1000,1..1000] of int64;
begin
assign(input,'energy.in');reset(input);
assign(output,'energy.out');rewrite(output);
readln(n);
for i:=1 to n do
begin
read(a[i]);
a[n+i]:=a[i];
end;
for i:=2*n-1 downto 1 do
for j:=i+1 to 2*n do
for k:=i to j-1 do
if f[i,k]+f[k+1,j]+a[i]*a[k+1]*a[j+1]>f[i,j] then
begin
f[i,j]:=f[i,k]+f[k+1,j]+a[i]*a[k+1]*a[j+1] ;
if f[i,j]>max then max:=f[i,j];
end;
writeln(max div 2);
close(input);close(output);
end.