第三第四个点WA,求大佬调一下
查看原帖
第三第四个点WA,求大佬调一下
1487884
zyd_123楼主2025/7/3 22:53
//我是用表格法,就是把左面和上面的数字加起来
//可能有些部分写得不好,特别繁琐,请原谅我这个新手
//如果能指出错哪里了就再好不过了
//我看标签让用动态规划但我不会
//这是代码:

#include <bits/stdc++.h>

using namespace std;

int xja[8] = {-2,-1,1,2,2,1,-1,-2};
int yja[8] = {1,2,2,1,-1,-2,-2,-1};

int main(){
	int a,b,c,d,xl=0,yl=0;
	cin>>a>>b>>c>>d;
	long long m[21][21] = {0};
	int z[21][21] = {0};
	z[0][0] = 1;
	for(int i=0;i<=a;i++){
		m[i][0] = 1;
	}
	for(int i=0;i<=b;i++){
		m[0][i] = 1;
	}
	for(int i=0;i<8;i++){
		xl = c+xja[i];
		yl = d+yja[i];
		if(xl>=0 && xl<=a && yl>=0 && yl<=b){
			m[xl][yl] = -1;
		}
	}
	m[c][d] = -1;
	for(int i=1;i<=a;i++){
		for(int j=1;j<=b;j++){
			if(m[i][j]!=-1 && z[i][j]==0){
				z[i][j] = 1;
				if((m[i-1][j]==-1 && m[i][j-1]!=-1) || (m[i-1][j]!=-1 && m[i][j-1]==-1)){
					m[i][j] = m[i-1][j]+m[i][j-1]+1;
				}else if(m[i-1][j]==-1 && m[i][j-1]==-1){
					m[i][j] = m[i-1][j]+m[i][j-1]+2;
				}else{
					m[i][j] = m[i-1][j]+m[i][j-1];
				}
			}
		}
	}
	cout<<m[a][b];
	return 0;
}
2025/7/3 22:53
加载中...