哪里错了?

改了好多遍,还剩一个点没过,说什么“程序输出比答案长”?!莫名其妙~

我用的是DP,哪位好心的牛帮我看一下:

program malanguohezu;

const

di:array[1..8] of integer=(-2,-1,1,2,2,1,-1,-2);

dj:array[1..8] of integer=(1,2,2,1,-1,-2,-2,-1);

var

i,j:longint;

n,m,hi,hj:qword;

a:array[0..15,0..15] of longint;

can:array[-2..15,-2..15] of boolean;

begin

readln(n,m,hi,hj);

if (hi=0) and (hj=0) then writeln(0)

else

begin

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

for i:=0 to n do a:=1;

for i:=1 to m do a[0,i]:=1;

fillchar(can,sizeof(can),true);

can[hi,hj]:=false;

for i:=1 to 8 do can[hi+di[i],hj+dj[i]]:=false;

for i:=1 to m do

begin

for j:=1 to n do

if can[j,i] then a[j,i]:=a[j-1,i]+a[j,i-1];

end;

writeln(a[n,m]);

end;

end.

4 条评论

  • @ 2009-10-28 16:21:26

    额~能说详细点吗?本人很菜,听不懂~SORRY

  • @ 2009-10-28 13:28:21

    因为你多加了一些不可行的情况,你算出来的当然比答案大。当位数超过的时候就显示那个了,是vijos防止套数据用的

  • @ 2009-10-28 13:10:05

    MS是哦……可是这样也不会输出什么“程序输出比答案长”这种东西吧

  • @ 2009-10-28 12:48:29

    初值有点问题吧,不一定都是1.

  • 1

信息

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