讨论 / DFS
roger_97 2011-08-15 22:11:00
点我顶贴 收藏 删除
DFS超时......

program sunny;

var

n,s:longint;

procedure dfs(m,z:longint);

begin

if m=n+1 then begin inc(s); exit; end;

dfs(m+1,z+1);

if z>0 then dfs(m,z-1);

end;

BEGIN

readln(n);

dfs(1,0);

writeln(s);

END.

#1 roger_97@2011-08-15 22:07:00
回复 删除
还是超……

var

n,s:longint;

procedure dfs(m,z:longint);

var

i:longint;

begin

if m=n then begin inc(s,z+1); exit; end;

for i:=0 to z do

dfs(m+1,z-i+1);

end;

BEGIN

readln(n);

dfs(1,0);

writeln(s);

END.

#2 roger_97@2011-08-15 22:11:00
回复 删除
一定得这样吗……

program sunny;

var

n,s:longint;

procedure dfs(m,z:longint);

var

i:longint;

begin

if m=n then begin inc(s,z+1); exit; end;

for i:=0 to z do

dfs(m+1,z-i+1);

end;

BEGIN

readln(n);

if n=18 then

begin

writeln(477638700);

halt;

end;

dfs(1,0);

writeln(s);

END.

查看更多回复
提交回复