不充钱,你怎么AC?
题目:http://codevs.cn/problem/1010/
首先我们将坐标都+1,因为它是从(0,0)开始的
预处理出禁区,也就是马能到达的格子和马自己的格子,标上记号
直接开始转移
把 f[0][1] 或者 f[1][0] 赋上1,这样 f[1][1] 就能正常转移
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#define N 17
using namespace std; const int xx[]={,,-,-,-,-,,},
yy[]={,,-,-,,,-,-};
int f[N][N],n,m;
bool g[N][N]; int main()
{
int x,y,i,j;
scanf("%d%d%d%d",&n,&m,&x,&y);
n++;
m++;
x++;
y++;
for (i=;i<=n;i++)
{
for (j=;j<=m;j++) g[i][j]=;
}
for (i=;i<;i++)
{
if (x+xx[i]<=n&&x+xx[i]>&&y+yy[i]<=m&&y+yy[i]>) g[x+xx[i]][y+yy[i]]=;
}
g[x][y]=;
f[][]=;
for (i=;i<=n;i++)
{
for (j=;j<=m;j++)
{
if (g[i][j]) continue;
f[i][j]=f[i-][j]+f[i][j-];
}
}
printf("%d\n",f[n][m]);
return ;
}