P1002 [NOIP2002 普及组] 过河卒,求助
  • 板块学术版
  • 楼主LC19120
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/22 20:38
  • 上次更新2025/1/23 00:04:43
查看原帖
P1002 [NOIP2002 普及组] 过河卒,求助
1547946
LC19120楼主2025/1/22 20:38

总有两个答案是错的,求助大佬,看看哪里错了

P1002 [NOIP2002 普及组] 过河卒

#include <bits/stdc++.h>
using namespace std;
bool test(int i, int j, int cx, int cy){
	int x[] = {1, 1, -1, -1, 2, 2, -2, -2};
	int y[] = {2, -2, 2, -2, 1, -1, 1, -1};
	if(i == cx && j == cy){
		return 1;
	}
	for(int k = 0; k < 8; k++){
		if(i == cx + x[k] && j == cy + y[k]) {
			return 1;
		}
	}
	return 0;
}

int step(int bx, int by, int cx, int cy) {
	
	vector< vector<long long> > add(bx + 1, vector<long long>(by + 1, 0));
	for(int i = 0; i <= bx; i++){
		for(int j = 0; j <= by; j++){
			if (test(i, j, cx, cy)){
				add[i][j] = 0;
			}else if(i == 0 && j == 0){
				add[i][j] = 1;
			}else if(i == 0){
				add[i][j] = add[i][j - 1];
			}else if(j == 0){
				add[i][j] = add[i - 1][j];
			}else{		 
				add[i][j] = add[i - 1][j] + add[i][j - 1];
			}
		}
	}
//	for(int i = 0; i <= bx; i++){
//		for(int j = 0; j <= by; j++){
//			cout << add[i][j] << ' ';
//		}
//		cout << endl;
//	}
    return add[bx][by];
}

int main() {
	int bx, by, cx, cy;
	cin >> bx >> by >> cx >> cy;
	cout << step(bx, by, cx, cy);
}

2025/1/22 20:38
加载中...