代码如下
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int fx[] = {0, -2, -1, 1, 2, 2, 1, -1, -2};
const int fy[] = {0, 1, 2, 2, 1, -1, -2, -2, -1};
ull n, m, hx, hy, dp[21][21];
bool vis[21][21];
void init()
{
for (int i = 0; i < 9; i++){
int x = hx + fx[i], y = hy + fy[i];
if (x < 0 || x >= n || y < 0 || y >= m) continue;
vis[x][y] = true;
}
dp[0][0] = 1;
}
int main()
{
scanf("%lld%lld%lld%lld", &n, &m, &hx, &hy);
init();
vis[0][0] = 1;
for (int i = 1; i <= n; i++)
if (!vis[i][0])
dp[i][0] = dp[i - 1][0];
for (int i = 1; i <= m; i++)
if (!vis[0][i])
dp[0][i] = dp[0][i - 1];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (!vis[i][j])
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
printf("%llu", dp[n][m]);
return 0;
}