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.