var n,i,j,k,m:integer;
max:longint;
top,wei:array[1..100]of integer;
f:array[1..100,1..100]of longint;
begin
read(n);
for i:=1 to n do
read(top[i]);
for i:=1 to n-1 do
wei[i]:=top[i+1];
wei[n]:=top[1];
m:=2*n-1;
for i:=n+1 to m do
begin
top[i]:=top[i-n];
wei[i]:=wei[i-n];
end;
for i:=1 to n do
for j:= i+1 to i+n-1 do
for k:=i to j-1 do
if f[i,j]<f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j]
then f[i,j]:=f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j];
for i:=1 to n do
if f[i,i+n-1]>max then max:=f[i,i+n-1];
write(max);
end.
for j:= i+1 to i+n-1 do
for k:=i to j-1 do
if f[i,j]<f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j]
then f[i,j]:=f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j];’
这里错了
改成
for j:=1 to n-1 do
for i:=1 to 2*n-1-j do
for k:=i to i+j-1 do
if f[i,i+j]<f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j]
then f[i,i+j]:=f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j]
(开始的时候把f[i,i]:=0;)
for j:= i+1 to i+n-1 do
for k:=i to j-1 do
if f[i,j]<f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j]
then f[i,j]:=f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j];’
这里错了
改成
for j:=1 to n-1 do
for i:=1 to 2*n-1-j do
for k:=i to i+j-1 do
if f[i,i+j]<f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j]
then f[i,i+j]:=f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j]
(开始的时候把f[i,i]:=0;)
‘for i:=1 to n do
for j:= i+1 to i+n-1 do
for k:=i to j-1 do
if f[i,j]<f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j]
then f[i,j]:=f[i,k]+f[k+1,j]+top[i]*wei[k]*wei[j];’
这里错了
改成
for j:=1 to n-1 do
for i:=1 to 2*n-1-j do
for k:=i to i+j-1 do
if f[i,i+j]<f[i,k]+f[k+1,j+i]+top[i]*wei[k]*wei[j+i]
then f[i,i+j]:=f[i,k]+f[k+1,j+i]+top[i]*wei[k]*wei[j+i]
(开始的时候把f[i,i]:=0;)