原题 洛谷P1002 [NOIP2002 普及组] 过河卒
我用的c++写的,但我输入6 6 3 3
时它却输出10
,而不是6
我的思路是首先数学上就是标数法呗,编程上也就dp动规,但为啥它会错呀?
我的代码:
#include<iostream>
using namespace std;
bool g[1001][1001];
long long dp[1001][1001]; // 使用 long long 类型以避免整数溢出
int main(){
int n, m;
int x, y;
cin >> n >> m >> x >> y;
g[x-2][y-1] = 1;
g[x-1][y-2] = 1;
g[x+1][y-2] = 1;
g[x+2][y-1] = 1;
g[x+2][y+1] = 1;
g[x+1][y+2] = 1;
g[x-1][y+2] = 1;
g[x-2][y+1] = 1;
for(int i = 0; i <= n; i++){
for(int j = 0; j <= m; j++){
if(i == 0 || j == 0){
dp[i][j] = 1;
}
else if(g[i][j]){
dp[i][j] = 0;
}
else{
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
cout << dp[n][m];
return 0;
}
注:编译器版本MinGW-w64 GCC 11.4.0 64-bit Debug