- 马拦过河卒
- 2009-10-28 12:02:10 @
改了好多遍,还剩一个点没过,说什么“程序输出比答案长”?!莫名其妙~
我用的是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 条评论
-
希翼 LV 8 @ 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