改为 m-1 就八个了(f【i,j】是从i到j的能量值)
问题二 为何最后两个点是保护性错误?
var head,tail:array[0..201] of integer;
n,m,i,j,k,p:integer;
max:longint;
f:array[0..101,0..201] of longint;
begin
readln(n);
for i:=1 to n do read(head[i]);
for i:=1 to n-1 do tail[i]:=head[i+1];
tail[n]:=head[1];
m:=2*n-1;
for i:=n+1 to m do begin head[i]:=head[i-n];tail[i]:=tail[i-n]; end;
fillchar(f,sizeof(f),0);
for p:=1 to n do
for i:=1 to m-1 do
begin
j:=i+p;
if j>m then break;
for k:=i to j-1 do
if f[i,j]<f[i,k]+f[k+1,j]+tail[k]*head[i]*tail[j]
then f[i,j]:=f[i,k]+f[k+1,j]+tail[k]*head[i]*tail[j];
end;
max:=0;
for i:=1 to n do
if max<f[i,i+n-1] then max:=f[i,i+n-1];
writeln(max);
end.
看吧
program Project1;
var a:array[1..200]of integer;
f:array[1..200,1..2000]of longint;
k,i,j,n,len:longint;
ans,max:longint;
procedure re;
begin
readln(n);
for i:=1 to n do begin
read(a[i]);
a[i+n]:=a[i];
end;
end;
procedure main;
begin
ans:=0;
for i:=1 to 2*n do
for j:=1 to 2*n do f[i,j]:=0;
for len:=2 to n do
for i:=1 to 2*n-len+1 do begin
j:=i+len-1;
max:=0;
for k:=i to j-1 do begin
max:=f[i,k]+f[k+1,j]+a[i]*a[j+1]*a[k+1];
if max>f[i,j]
then f[i,j]:=max;
end;
end;{i}
for i:=1 to n do begin
if f[i,i+n-1]>ans then ans:=f[i,i+n-1];
end;
end;
procedure wu;
begin
write(ans);
end;
begin
re;
main;
wu;
end.
和点水压压惊,找了好久,既然是这个