问题

先贴一下代码

#include <iostream>
#include <vector>
#include <map>
#include <string>

using namespace std;

int (*ptr)[2];
map<pair<int,int>,long long> mem;

long long run(int x, int y){
    if (mem.find(pair{x,y}) != mem.end()) return mem[pair{x,y}];
    if (x < 0 || y < 0) return 0;
    for (int i = 0;i < 9; i++){
        if(x == ptr[i][0] && y == ptr[i][1]) return 0;
    }
    if (x == 0 && y == 0) return 1;
    long long res = run(x - 1, y) + run(x, y - 1);
    mem[pair{x, y}] = res;
    return res;
}

int main() {
    int n, m, p , q;
    cin >> n >> m >> p >> q;
    int d[9][2] = {{p+1, q+2},{p-1, q-2},{p-1, q+2},{p+1, q-2},
                          {p+2, q+1},{p-2, q-1},{p-2, q+1},{p+2, q-1},{p,q}};
    ptr = d;
    cout << run(n, m);
    return 0;
}

用例:

2 3 0 1

输出:

0

答案:

4