讨论 / 既搜又打表。
lijiaming12340 2011-10-15 22:07:00
点我顶贴 收藏 删除
program ss;

var a:array[1..40] of longint;

i,j,k,m,n,s,t,ans:longint;

function judge(x:longint):boolean;

var i,j,k:longint;

begin

if x<=2 then exit(true);

for i:=1 to x div 3 do

begin

judge:=false;

for j:=1 to i do

if (a[x-j+1]<>a[x-i-j+1]) or (a[x-i-j+1]<>a[x-i-i-j+1]) or (a[x-j+1]<>a[x-i-j+1]) then begin judge:=true; break; end;

if not judge then exit(false);

end;

end;

procedure dfs(x:longint);

var i,j:longint;

begin

for i:=0 to 1 do

begin

a[x]:=i;

if judge(x) then

begin

if x=n then inc(ans)

else dfs(x+1);

end;

end;

end;

begin

readln(n);

if n<=33 then

begin

ans:=0; k:=0;

dfs(1);

writeln(ans);

end

else case n of

34:write(1041910);

35:write(1518840);

36:write(2213868);

37:write(3226896);

38:write(4703372);

39:write(6855388);

40:write(9992596);

end;

end.

查看更多回复
提交回复