为什么只过了8个点

program ljlf;

const

max=100000;

var

a:array[-10..20,-10..20] of longint;

n,m,hx,hy,i,j:integer;

k,g:longint;

procedure work;

begin

fillchar(a,sizeof(a),0);

readln(n,m,hx,hy);

a[hx,hy]:=max;

a[hx-2,hy-1]:=max;

a[hx-1,hy-2]:=max;

a[hx+1,hy-2]:=max;

a[hx+2,hy-1]:=max;

a[hx-2,hy+1]:=max;

a[hx-1,hy+2]:=max;

a[hx+1,hy+2]:=max;

a[hx+2,hy+1]:=max;

for i:=1 to n do begin

if amax then a:=1; end;

for i:=1 to m do begin

if amax then a[0,i]:=1; end;

for i:=1 to n do

begin

for j:=1 to n do

begin

if amax then

begin

if a=max then k:=0 else k:=a;

if a=max then g:=0 else g:=a;

a:=k+g;

end

else a:=0;

end;

end;

writeln(a[n,m]);

end;

begin

work;

end.

这是我的程序

高手看看有什么特殊情况没有考虑的。

2 条评论

  • @ 2009-05-11 21:47:38

    一楼的看清楚在回答

    你的方程和我的方程是一样的。

  • @ 2009-05-11 11:39:53

    其实不用这么麻烦的。

    分析题意可知道整个棋盘就只有9个点(马本身和马能跳到的8个点)无法到达;要到达一个点(x,y)假设到达(x-1,y)点有n条路径,到达(x,y-1)

    有m条路径,则到达(x,y)点就有m+n条路径(因为一个点只能由它左边或上边到达)

    所以状态转移方程就是:

    if t= ture then f:=f+f;

    数组t为布尔型,表示坐标为(i,j)的点能否到达,数组f表示到达坐标为(i,j)的点的路径是多少条。

    当然有特殊情况:首先付初值f[0,0]:=1,然后就是在最上边的点只能由左边到达,在最左边的点只能由上边到达

  • 1

信息

ID
1121
难度
4
分类
动态规划 点击显示
标签
递交数
9572
已通过
3779
通过率
39%
被复制
23
上传者