求助大佬
查看原帖
求助大佬
723796
sumlen楼主2023/10/3 16:56

帮帮我! dp爆0

#include <bits/stdc++.h>
using namespace std;
int mx[9], my[9];
int dp[30][30];
int n, m;

bool cheek(int x, int y) {
	for (int i = 0; i <= 8; i++) {
		if (x == mx[i] && y == my[i])
			return 1;
	}
	return 0;
}

int main() {
	cin >> n >> m >> mx[0] >> my[0];
	mx[1] = mx[0] - 2, my[1] = my[0] - 1;
	mx[2] = mx[0] - 2, my[2] = my[0] + 1;
	mx[3] = mx[0] - 1, my[3] = my[0] - 2;
	mx[4] = mx[0] - 1, my[4] = my[0] + 2;
	mx[5] = mx[0] + 2, my[5] = my[0] - 1;
	mx[6] = mx[0] + 2, my[6] = my[0] + 1;
	mx[7] = mx[0] + 1, my[7] = my[0] - 2;
	mx[8] = mx[0] + 1, my[8] = my[0] + 2;
	if (cheek(0, 0)) {
		cout << 0;
		return 0;
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (i == 1 && j == 1) {
				dp[i][j] = 1;
				continue;
			}
			if (cheek(i, j)) {
				dp[i][j] = 0;
				continue;
			}
			if (i == 1) {
				dp[i][j] += dp[i][j - 1];
				continue;
			}
			if (j == 1) {
				dp[i][j] += dp[i - 1][j];
				continue;
			}
			dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
		}
	}
	cout << dp[n][m];
	return 0;
}
2023/10/3 16:56
加载中...