80求调
查看原帖
80求调
1284662
hainoir楼主2025/1/19 21:08
#include <bits/stdc++.h>
using namespace std;
long long a,b,n,m,dp[40][40],ma[40][40];

void work(long long x,long long y){   //马的控制点,在26行有判断,是否加当前的点
    ma[x][y]=1;
    ma[x-1][y-2]=1;
    ma[x-2][y-1]=1;
    ma[x-2][y+1]=1;
    ma[x-1][y+2]=1;
    ma[x+1][y-2]=1;
    ma[x+2][y-1]=1;
    ma[x+2][y+1]=1;
    ma[x+1][y+2]=1;
}

int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	
    cin >> n >> m >> a >> b;
    
    dp[1][1]=1;   //因原点(0,0)的路径条数是0,且为避免原点的影响,所以将(1,1)设置成原点
    n++;m++;     //b点坐标,+1的原因是:原点变为(1,1)
    a++;b++;     //马的坐标,+1原因同上
    
    work(a,b);   //得到马的控制点
    
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
        	if((i!=1||j!=1)&&!ma[i][j]) dp[i][j]=dp[i-1][j]+dp[i][j-1];
        }
    }
    
    cout << dp[n][m] << '\n';
    return 0;
}
2025/1/19 21:08
加载中...