60分蒟蒻求助

回复帖子

@傻狗凉 2021-07-12 17:19 回复
#include <bits/stdc++.h>
using namespace std;
int a,b,x,y;
long long dp[22][22];
int main(){
    cin>>a>>b>>x>>y;
    for(int i=0;i<=a;++i)
        dp[i][0]=1;
    for(int i=1;i<=b;++i)
        dp[0][i]=1;
    if(x>=1&&y>=2) dp[x-1][y-2]=-1;
    if(x>=2&&y>=1) dp[x-2][y-1]=-1;
    if(x>=1) dp[x-1][y+2]=-1;
    if(y>=1) dp[x+2][y-1]=-1;
    if(x>=2) dp[x-2][y+1]=-1;
    if(y>=2) dp[x+1][y-2]=-1;
    dp[x+1][y+2]=-1;
    dp[x+2][y+1]=-1;
    dp[x][y]=-1;
    for(int i=1;i<=a;++i)
    {
        for(int j=1;j<=b;++j)
        {
            if(dp[i][j]==-1) continue;
            if(dp[i-1][j]!=-1) dp[i][j]+=dp[i-1][j];
            if(dp[i][j-1]!=-1) dp[i][j]+=dp[i][j-1];
        }
    }
    cout<<dp[a][b]<<endl;
    return 0;
}
@nju181840342 2021-07-17 12:19 回复 举报

初始化dp出错了。如果马正好能踩到边线上,比如踩(0,4)点,那么(0,5)(0,6)...都是0(或者-1),而你这里仍然是1,所以最后答案会大很多

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



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