60分,#3#4错误
查看原帖
60分,#3#4错误
775208
Alvin1204楼主2023/8/2 10:55
#include<bits/stdc++.h>
using namespace std;
int dx[]={2,2,1,1,-1,-1,-2,-2};
int dy[]={-1,1,-2,2,-2,2,-1,1};
int mp[25][25],f[25][25];
int main(){
	int n,m,x,y;
	cin>>n>>m>>x>>y;
	mp[x][y]=1;
	for(int i=0;i<8;i++){				//标记控制点 
		int nx=x+dx[i],ny=y+dy[i];
		if(nx>=1&&nx<=n&&ny>=1&&ny<=m)
			mp[nx][ny]=1;
	}
	f[0][0]=1;							//状态数组起点初始化 
	for(int i=0;i<=n;i++){
		for(int j=0;j<=m;j++){
			if(i==0&&j==0) continue;	//起点跳过 
			if(mp[i][j]) continue;		//控制点跳过
			if(mp[i][j]==0){
				f[i][j]=f[i-1][j]+f[i][j-1];
				if(mp[i-1][j])
					f[i][j]-=f[i-1][j];	//若为控制点,路径数量不加该点 
				if(mp[i][j-1])
					f[i][j]-=f[i][j-1];	//同上 
			}
		}
	}
	cout<<f[n][m];
	return 0;
} 
2023/8/2 10:55
加载中...