有大佬可以解释一下这样为什么wa 3 4吗,想不明白啊

P1002 [NOIP2002 普及组] 过河卒

我也错3 4``` #include <bits/stdc++.h> using namespace std; int n,m,a,b,xx[15],yy[15]; int jieguo[25][25]; int in(int x,int y) { for (int i = 0;i < 9;i ++) if (xx[i] == x && yy[i] == y) return 1; return 0; } int jisuan(int x,int y) { if (x == n && y == m) return 1; if (jieguo[x][y] != 0) return jieguo[x][y]; if (in(x,y)) return 0; if (x > n || y > m) return 0; jieguo[x][y] = jisuan(x + 1,y) + jisuan(x,y + 1); return jieguo[x][y]; } int main() { cin >> n >> m >> a >> b; xx[0] = a;xx[1] = a + 1;xx[2] = a + 2;xx[3] = a + 1;xx[4] = a + 2;xx[5] = a - 1;xx[6] = a - 2;xx[7] = a - 1;xx[8] = a - 2; yy[0] = b;yy[1] = b + 2;yy[2] = b + 1;yy[3] = b - 2;yy[4] = b - 1;yy[5] = b + 2;yy[6] = b + 1;yy[7] = b - 2;yy[8] = b - 1; cout << jisuan(0,0); return 0; } ```
by zhr756812943 @ 2024-01-21 09:18:50


上面给错了```cpp #include <bits/stdc++.h> using namespace std; int n,m,a,b,xx[15],yy[15]; int jieguo[25][25]; int in(int x,int y) { for (int i = 0;i < 9;i ++) if (xx[i] == x && yy[i] == y) return 1; return 0; } int jisuan(int x,int y) { if (x == n && y == m) return 1; if (jieguo[x][y] != 0) return jieguo[x][y]; if (in(x,y)) return 0; if (x > n || y > m) return 0; jieguo[x][y] = jisuan(x + 1,y) + jisuan(x,y + 1); return jieguo[x][y]; } int main() { cin >> n >> m >> a >> b; xx[0] = a;xx[1] = a + 1;xx[2] = a + 2;xx[3] = a + 1;xx[4] = a + 2;xx[5] = a - 1;xx[6] = a - 2;xx[7] = a - 1;xx[8] = a - 2; yy[0] = b;yy[1] = b + 2;yy[2] = b + 1;yy[3] = b - 2;yy[4] = b - 1;yy[5] = b + 2;yy[6] = b + 1;yy[7] = b - 2;yy[8] = b - 1; cout << jisuan(0,0); return 0; } ```
by zhr756812943 @ 2024-01-21 09:20:41


@[zhr756812943](/user/1040258) WA 3 4是因为数据范围开小了,需要把int开成long long
by fzy1139950253 @ 2024-01-21 15:39:52


开long long 啊
by small_keyboard @ 2024-01-21 17:30:50


|