dx,dy有什么功能?为什么要赋值成这样?
#include<bits/stdc++.h>
using namespace std;
const int dx[] = {0, 1, 1, -1, -1, 2, 2, -2, -2};
const int dy[] = {0, 2, -2, 2, -2, 1, -1, 1, -1};
int uafol[3305][3305], n, m, mx, my;
int dfs(int x, int y) {
if (x < 1 || y < 1)return 0;
if (x == 1 && y == 1)return uafol[x][y] = 1;
if (uafol[x][y] != -1)return uafol[x][y];
return uafol[x][y] = dfs(x - 1, y) + dfs(x, y - 1);
}
signed main() {
cin >> n >> m >> mx >> my;
n++;
m++;
mx++;
my++;
memset(uafol, -1, sizeof(uafol));
for (int i = 0; i <= 8; i++) {
int nx = mx + dx[i];
int ny = my + dy[i];
if (nx >= 1 && ny >= 1)
uafol[nx][ny] = 0;
}
cout << dfs(n, m);
return 0;
}