AC
```c
#include<iostream>
using namespace std;
const int N = 35;
int n, m, x, y;
long long dp[N][N]; // 因为最后数字很大 所以要开long long
bool vis[N][N];
int X[8] = {-2, -1, 1, 2, 2, 1, -1, -2};
int Y[8] = {-1, -2, -2, -1, 1, 2, 2, 1};
// 马能走的八个坐标点
int main()
{
cin >> n >> m >> x >> y;
dp[2][1] = 1;
vis[x+2][y+2] = 1;
for (int i = 0; i < 8; i ++)
vis[x+X[i]+2][y+Y[i]+2] = 1; // 马能走的坐标点标记为 1 , 说明卒就不能走这里
for (int i = 2; i <= n+2; i ++)
for (int j = 2; j <= m+2; j ++) {
if (vis[i][j])
continue; // 是马的阻挡点就跳过
dp[i][j] = dp[i-1][j] + dp[i][j-1];
// 状态转移方程
}
cout << dp[n+2][m+2];
return 0;
}
```
by timmyliao @ 2024-01-21 10:25:21
WA3 4是因为数据范围开小了,需要开long long才行
by fzy1139950253 @ 2024-01-21 15:38:58
@[fzy1139950253](/user/535584)
非常感谢
by zhr756812943 @ 2024-03-10 21:10:21