问题
先贴一下代码
#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