讨论 / 递推
B-L-A-C-K 2009-01-29 21:03:00
点我顶贴 收藏 删除
按对角线划分阶段,来一个递推

如:

3

0 0 0

0 1 0

0 0 0

变成:

0

0 0

0 1 0

0 0

0

然后

f[i,j]=sum{

f[i-1,j](a[i-1,j]=0),

f[i-1,j-1](a[i-1,j-1]=0)

}

program P158;

var f:array[1..41,0..20]of longint;

a:array[1..100,1..50]of integer;

i,j,n:integer;

begin

read(n);

for i:=1 to n do

for j:=1 to n do

read(a[i+j-1,j]);

f[1,1]:=1;

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

for j:=1 to n do

if a[i,j]=0 then

begin

if a[i-1,j]=0 then f[i,j]:=f[i-1,j];

if (j>1)and(a[i-1,j-1]=0) then inc(f[i,j],f[i-1,j-1])

end;

writeln(f[n+n-1,n])

end.

查看更多回复
提交回复