纯萌新40分求助

回复帖子

@ITZDC9 2020-09-12 18:02 回复

原先代码#1 #5 WA

然后改了半天改不回去了,现在是#1 #3 #4 WA

#include <bits/stdc++.h>
using namespace std;
unsigned long long dp[999][999];
bool ifdp[999][999];
int mx[9] = {0,-2,-1,1,2,-2,-1,1,2};
int my[9] = {0,1,2,2,1,-1,-2,-2,-1};
int main()
{
    int n,m,a,b;
    cin >> n >> m >> a >> b;
    dp[a][b] = 0;
    ifdp[a][b] = 1;//马在的地方
    for (int i = 0;i < 9;i++) 
    {
        if (a + mx[i] >= 0 && a + mx[i] <= n && b + my[i] >= 0 && b + my[i] <= m)
        {
            ifdp[a + mx[i]][b + my[i]] = 1;
            dp[a + mx[i]][b + my[i]] = 0;
        }//马能走的地方
    }
    for(int i = 0;i <= n;i++)
    {
        dp[i][0] = 1;
    }
    for(int i = 0;i <= m;i++)
    {
        dp[0][i] = 1;
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if(ifdp[i][j] == 0)
            {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];//向下和向右走的方法之和
            }
        }
    }
    cout << dp[n][m];
}

原来的代码和现在的代码都能过样例

求解qwq

@metaphysis 2020-09-12 21:53 回复 举报

@ITZDC9

for(int i = 0;i <= n;i++)
    {
        dp[i][0] = 1;
    }
    for(int i = 0;i <= m;i++)
    {
        dp[0][i] = 1;
    }

这里有问题,如果马能控制左边或者上边,在其右方和下方的所有格点 dp[i][j] = 0。

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。