讨论 / 能量项链 两个大问题 war80 大神帮忙
宗严 2012-08-10 08:10:00
点我顶贴 收藏 删除
问题一 当i的范围是 1 to n do只能过5 个点

改为 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.

#1 2213878408@2016-11-13 03:51:03
回复 删除
RQNOJ特色超时,日常超时,无脑超时,不要见怪

星门跳跃第十个数据读入就超时了,还算个啥

#2 2213878408@2016-11-13 03:52:46
回复 删除
我们算法是一样的,我看AC的算法时间复杂度和我们一样啊

看吧

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.

#3 2213878408@2016-11-13 04:06:43
回复 删除
我刚才过了,你和我一样,发数组,是[1..200,1..200],你是[1..100,1..200]

和点水压压惊,找了好久,既然是这个

查看更多回复
提交回复