求助,wa1了 一直找不到问题
查看原帖
求助,wa1了 一直找不到问题
1485926
thatoneshould楼主2024/11/19 17:09
#include <bits/stdc++.h>
#define N 100
#define ll long long
using namespace std;

int main() {
    ll n, m, j, k;
    cin >> n >> m >> j >> k;
    ll pla[N][N] = {0}; // 初始化棋盘

    // 标记马的控制点
    pla[j][k] = 1;
    if (j-2 >= 0 && k+1 < m) pla[j-2][k+1] = 1;
    if (j-2 >= 0 && k-1 >= 0) pla[j-2][k-1] = 1;
    if (j+2 < n && k+1 < m) pla[j+2][k+1] = 1;
    if (j+2 < n && k-1 >= 0) pla[j+2][k-1] = 1;
    if (j-1 >= 0 && k+2 < m) pla[j-1][k+2] = 1;
    if (j-1 >= 0 && k-2 >= 0) pla[j-1][k-2] = 1;
    if (j+1 < n && k+2 < m) pla[j+1][k+2] = 1;
    if (j+1 < n && k-2 >= 0) pla[j+1][k-2] = 1;

    // 动态规划计算路径数
    ll dp[N][N] = {0}; // 初始化路径数数组
    dp[0][0] = 1; // 起点
	
	for (ll i = 1; i <= n; ++i) {
        if (pla[i][0] == 0) dp[i][0] = dp[i-1][0];
    }
    for (ll i = 1; i <= m; ++i) {
        if (pla[0][i] == 0) dp[0][i] = dp[0][i-1];
    }
    
    for (ll i = 1; i <= n; ++i) {
        for (ll j = 1; j <= m; ++j) {
            if (pla[i][j] == 1) continue; // 如果是马的控制点,跳过
            if (i > 0) dp[i][j] += dp[i-1][j]; // 从左方来
            if (j > 0) dp[i][j] += dp[i][j-1]; // 从上方来
          
        }
    }
	for (ll i = 0; i <= n; ++i) 
        for (ll j = 0; j <= m; ++j) 
        	printf("%d%d %d\t",i,j,dp[i][j]);
    // 输出结果
    cout << dp[n][m] << endl;

    return 0;
}
2024/11/19 17:09
加载中...