34第一种方法WA,第二种方法TLE了,求大佬
查看原帖
34第一种方法WA,第二种方法TLE了,求大佬
787176
EineKliene楼主2023/1/5 15:55
#include <iostream>
using namespace std;
int a[21][21] = { 0 };
int m, n, x, y;
int main(){
	cin >> n >> m >> x >> y;
	int b[9] = { -2,-1,1,2,-2,-1,1,2,0 };
	int c[9] = { -1,-2,-2,-1,1,2,2,1,0 };
	for (int i = 0; i <= n; i++) a[i][0] = 1;
	for (int j = 1; j <= m; j++) a[0][j] = 1;
	for (int i = 0; i < 9; i++) {
		if (x + b[i] >= 0 && y + c[i] >= 0) {
			a[x + b[i]][y + c[i]] = 0;
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (a[i - 1][j] && a[i][j - 1]) {
				a[i][j] = a[i - 1][j] + a[i][j - 1];
			}
			else if (!a[i - 1][j])a[i][j] = a[i][j - 1];
			else if (!a[i][j - 1])a[i][j] = a[i - 1][j];
			for (int i = 0; i < 9; i++) {
				if (x + b[i] >= 0 && y + c[i] >= 0) {
					a[x + b[i]][y + c[i]] = 0;
				}
			}
		}
	}
	cout << a[n][m];
}

这是第一种

#include <iostream>
#define INF 1
using namespace std;
int a[21][21] = { 0 };
int x, y, n, m;
int ans = 0;
void dp(int i, int j);
int main() {
	cin >> n >> m >> x >> y;
	int b[9] = { -2,-1,1,2,-2,-1,1,2,0 };
	int c[9] = { -1,-2,-2,-1,1,2,2,1,0 };
	for (int i = 0; i < 9; i++) {
		if (x + b[i] >= 0 && y + c[i] >= 0) {
			a[x + b[i]][y + c[i]] = INF;
		}
	}
	dp(0, 0);
	cout << ans;
}
void dp(int i, int j) {
	if (i == n && j == m) {
		ans++;
		return;
	}
	if (a[i + 1][j] != INF && i + 1 <= n) {
		dp(i + 1, j);
	}
	if (a[i][j + 1] != INF && j + 1 <= m) {
		dp(i, j + 1);
	}
}

这是第二种

2023/1/5 15:55
加载中...