讨论 / 为什么过不去? 加分二叉树
147460375 2011-10-03 05:38:00
点我顶贴 收藏 删除
状态: Unaccepted

测评机: Xeost[5]

得分: 60分

提交日期: 2010-8-4 16:11:00

有效耗时: 406毫秒

测试结果1: 通过本测试点|有效耗时172ms

测试结果2: 通过本测试点|有效耗时47ms

测试结果3: 测试结果错误.错误结果为:6366794

5 3 2 1 4 12 8 6 7 10 9 11 14 13 15

正确结果应为:6366794

5 3 1 2 4 12 8 6 7 10 9 11 14 13 15

测试结果4: 测试结果错误.错误结果为:317358969

5 3 2 1 4 16 12 8 6 7 10 9 11 14 13 15 18 17 19 20

正确结果应为:317358969

5 3 1 2 4 16 12 8 6 7 10 9 11 14 13 15 18 17 19 20

测试结果5: 通过本测试点|有效耗时47ms

测试结果6: 通过本测试点|有效耗时47ms

测试结果7: 通过本测试点|有效耗时47ms

测试结果8: 通过本测试点|有效耗时46ms

测试结果9: 测试结果错误.错误结果为:6366794

5 3 2 1 4 12 8 6 7 10 9 11 14 13 15

正确结果应为:6366794

5 3 1 2 4 12 8 6 7 10 9 11 14 13 15

测试结果10: 测试结果错误.错误结果为:317358969

5 3 2 1 4 16 12 8 6 7 10 9 11 14 13 15 18 17 19 20

正确结果应为:317358969

5 3 1 2 4 16 12 8 6 7 10 9 11 14 13 15 18 17 19 20

program t3;

var

i,j,n:integer;

s:array[1..30]of integer;

f:array[1..30,1..30,0..1] of cardinal;

max:cardinal;

k,l,sum:integer;

procedure rea;

var

i,j:integer;

begin

readln(n);

for i:=1 to n do

begin

read(s[i]);

f[i,i,0]:=s[i];

end;

for i:=1 to n do

for j:=i+1 to n do

f[j,i,0]:=1;

end;

procedure wri(h,r:integer);

begin

if (f[h,r,1]<>0) then

begin

sum:=sum+1;

s[sum]:=f[h,r,1];

wri(h,f[h,r,1]-1);

wri(f[h,r,1]+1,r);

end;

end;

begin

rea; sum:=0;

for i:=1 to n do

f[i,i,1]:=i;

for l:=2 to n do

for i:=1 to n-l+1 do

begin

j:=i+l-1;

for k:=i to j do

begin

if f[i,j,0]<f[i,k-1,0]*f[k+1,j,0]+s[k]

then begin

f[i,j,0]:=f[i,k-1,0]*f[k+1,j,0]+s[k];

f[i,j,1]:=k;

end;

end;

end;

writeln(f[1,n,0]);

wri(1,n);

for i:=1 to n-1 do

write(s[i],' ');

writeln(s[n]);

end.

#1 Feather_Angel@2010-08-04 02:40:00
回复 删除
题目不严谨...多种先序遍历...但可以做出来的...

题目不严谨...

比如样例

可能是3 1 2 4 5

可能 3 2 1 5 4

都一样

3

1 4

2 5

3

2 5

1 4

都可能

先序遍历是

**3

1***4

*2***5

**3

*2**5

1**4

得到的值都一样

题目不严谨...

你可以尝试『尽量往左偏』

#2 wangyaohui@2011-10-03 05:38:00
回复 删除
楼上英明
查看更多回复
提交回复