讨论 / 错在哪里
budiebuai 2008-07-11 23:32:00
点我顶贴 收藏 删除
program ddddd;

var

a:array[1..100]of integer;

h:array[1..200,1..200]of longint;

f:array[1..200,1..200]of boolean;

max,i,s,n:longint;

function pro(l1,l2:integer):longint;

var

i:integer;

min,we:longint;

begin

if (l1>n)and(l2>n) then

begin

l1:=l1-n;

l2:=l2-n;

end;

if f[l1,l2]then

begin

pro:=h[l1,l2];

exit;

end;

if l2-l1=0 then

begin

f[l1,l2]:=true;

h[l1,l2]:=0;

pro:=0;

exit;

end;

if l2-l1=1 then

begin

f[l1,l2]:=true;

h[l1,l2]:=a[l1]*a[l2]*a[l2+1];

pro:=h[l1,l2];

exit;

end;

min:=0;

for i:= l1+1 to l2-1 do

begin

we:=pro(l1,i)+pro(i+1,l2)+a[l1]*a[l2+1]*a[i+1];

if we>min then

begin

min:=we;

end;

h[l1,l2]:=min;

f[l1,l2]:=true;

end;

pro:=h[l1,l2];

end;

begin

read(n);

fillchar(f,sizeof(f),false);

fillchar(h,sizeof(h),0);

for i:= 1to n do

begin

read(a[i]);

a[i+n]:=a[i];

end;

a[2*n+1]:=a[1];

max:=0;

for i:= 1to n do

begin

s:=pro(i,n+i-1);

{ writeln(s);}

if s>max then

max:=s;

end;

{max:=pro(1,n); }

write(max);

end.

查看更多回复
提交回复