这题跟一本通1314一样
一本通1314题解链接: 一本通1314_小王子009的博客-优快云博客
直接上代码
//【例3.6】过河卒(Noip2002)
#include <iostream>
using namespace std;
typedef long long LL;
const int N = 25;
LL dp[N][N];
bool mp[N][N];
int n, m, x, y;
int dir[8][2] = {{-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}};
int main() {
/*
dp[i][j] 表示从 (0, 0) 到 (i, j) 的方案数
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
*/
cin >> n >> m >> x >> y;
n ++, m ++, x ++, y ++;
mp[x][y] = 1;
for (int i = 0; i < 8; i ++) {
int dx = x + dir[i][0];
int dy = y + dir[i][1];
if (dx >= 0 && dy >= 0)
mp[dx][dy] = true;
}
dp[0][1] = 1;
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= m; j ++) {
if (mp[i][j])
dp[i][j] = 0;
else
dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
}
}
// for (int i = 1; i <= n; i ++) {
// for (int j = 1; j <= m; j ++) {
// printf ("%5d", dp[i][j]);
// }
// puts("");
// }
cout << dp[n][m];
return 0;
}
/*
【输入样例】
8 6 0 4
【输出样例】
1617
*/
原题链接:P1002 [NOIP2002 普及组] 过河卒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)