大佬帮忙看一下,谢谢了
#include <bits/stdc++.h>
using namespace std;
//定义inf=-1,初始化数组用
long long inf = -1;
//Last在递归函数中保存最终结果
unsigned long long Last = 0;
//All数组保存结果
long long All[22][22];
unsigned long long MAIN(long long a, long long b, long long c[3][9]) {
//判断(a,b)是不是马的落点以及马本身
if ((a == c[0][0] && b == c[1][0]) || (a == c[0][1] && b == c[1][1]) || (a == c[0][2] && b == c[1][2])
|| (a == c[0][3] && b == c[1][3]) || (a == c[0][4] && b == c[1][4]) || (a == c[0][5] && b == c[1][5])
|| (a == c[0][6] && b == c[1][6]) || (a == c[0][7] && b == c[1][7]) || (a == c[0][8] && b == c[1][8])) {
return 0;
}
if (a == 0) {
return 1;
}
if (b == 0) {
return 1;
}
//如果不是-1,表示已经被计算过了
if (All[a][b] != -1) {
return All[a][b];
}
//状态转移
Last = MAIN(a, b - 1, c ) + MAIN(a - 1, b, c );
//算出来存入All
All[a][b] = Last;
return Last;
}
int main(int argc, char **argv) {
//初始化保存结果的数组
memset(All, inf, sizeof(All));
long long a, b, c1, c2;
cin >> a >> b >> c1 >> c2;
long long c[3][9];
//这里对马坐标进行计算和赋值
c[0][0] = c1 + 1;
c[1][0] = c2 + 2;
c[0][1] = c1 + 2;
c[1][1] = c2 + 1;
c[0][2] = c1 + 2;
c[1][2] = c2 - 1;
c[0][3] = c1 + 1;
c[1][3] = c2 - 2;
c[0][4] = c1 - 1;
c[1][4] = c2 - 2;
c[0][5] = c1 - 2;
c[1][5] = c2 - 1;
c[0][6] = c1 - 2;
c[1][6] = c2 + 1;
c[0][7] = c1 - 1;
c[1][7] = c2 + 2;
c[0][8] = c1;
c[1][8] = c2;
cout << MAIN(a, b, c);
}