一看到这题稍稍有点懵,但是仔细想想发现是大水题~~
f[i][j]表示的是从起点到(i,j)的路径数。
比较有意思的一点是,我在计算马的控制点的时候忘记控制边界了,居然AC了???
这里的正确写法应该是
int x[8]={-2,-2,-1,-1,1,1,2,2}; int y[8]={-1,1,-2,2,-2,2,1,-1}; /* ...... */ for(i=0;i<8;i++) { if((y[i]+hy)>=0&&(y[i]+hy)<=20&&(x[i]+hx)>=0&&(x[i]+hx)<=20) { control[y[i]+hy][x[i]+hx]=1; } }
下面是我的代码:
#include<cstdio> #include<cstring> bool control[21][21]; int bx,by,hx,hy,f[21][21]; int main() { memset(f,0,sizeof(f)); f[0][0]=1; scanf("%d%d%d%d",&bx,&by,&hx,&hy); control[hx][hy]=1; control[hx-2][hy-1]=1;control[hx-2][hy+1]=1;control[hx-1][hy+2]=1;control[hx-1][hy-2]=1; control[hx+2][hy-1]=1;control[hx+2][hy+1]=1;control[hx+1][hy+2]=1;control[hx+1][hy-2]=1; for(int i=0;i<=bx;i++) for(int j=0;j<=by;j++) { if(i>0&&!control[i][j]) f[i][j]+=f[i-1][j]; if(j>0&&!control[i][j]) f[i][j]+=f[i][j-1]; } printf("%d\n",f[bx][by]); return 0; }
Comments | NOTHING