圆圆zry 2013-10-30 02:35:00
点我顶贴
收藏
删除
这是代码。。f[i,j]表示从j开始到j+i个合并的最大值
program energy;
var f:array[0..200,1..200] of longint;
a:array[1..300] of longint;
i,j,k,l,m,n,x,y:longint;
function max(x,y:longint):longint;
begin
if x>y then exit(x) else exit(y);
end;
begin
readln(n);
for i:=1 to n do
begin
read(a[i]);
a[i+n]:=a[i];
end;
fillchar(f,sizeof(f),0);
for i:=1 to n do
for j:=1 to n do
for k:=1 to i-1 do
f[i,j]:=max(f[i,j],f[k,j]+f[i-k,j+k]+a[j+i]*a[j+k]*a[j]);
m:=0;
for i:=1 to n do
if f[n,i]> m then m:=f[n,i];
writeln(m);
end.