- 由于今天不知道刷点什么题
- 于是写了两道小水题
- 另一道实在太水
- 就不写了
- 这道题我做完才发现竟然是第四道
(我都这么厉害了吗?)
具体思路
- 很简单,在整个棋盘上只有被马占据的9个点不能走
- 剩下的用递推就行
- 其中要注意马占据的几个点有可能有越界的
- 需要处理一下
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y;
bool a[30][30];
long long b[30][30];
int dx[8]={1,-1,1,-1,2,-2,2,-2};
int dy[8]={2,2,-2,-2,1,1,-1,-1};
int main()
{
memset(a,0,sizeof(a));
scanf("%d%d%d%d",&n,&m,&x,&y);
n++,m++,x++,y++;
a[x][y]=1;
for(int i=0;i<8;i++)
if(x+dx[i]>=0&&y+dy[i]>=0)
a[x+dx[i]][y+dy[i]]=1;
memset(b,0,sizeof(b));
b[1][1]=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(!a[i+1][j])b[i+1][j]+=b[i][j];
if(!a[i][j+1])b[i][j+1]+=b[i][j];
}
printf("%lld\n",b[n][m]);
return 0;
}