• 过河卒 题解


    solution:

    #include<cstdio>
    using namespace std;
    long long f[40][40],flag[40][40];
    int main()
    {
        int n,m,i,j,a,b;
        f[0][0]=1; 
        scanf("%d%d%d%d",&n,&m,&a,&b);   //标记马的控制点 
        if(a>=2&&b>=1)     flag[a-2][b-1]=1;
        if(a>=2)           flag[a-2][b+1]=1;
        if(a>=1&&b>=2)     flag[a-1][b-2]=1;
        if(a>=1)           flag[a-1][b+2]=1;
        if(b>=2)           flag[a+1][b-2]=1;
        flag[a+1][b+2]=1;
        if(b>=1)           flag[a+2][b-1]=1;
        flag[a+2][b+1]=1;
        flag[a][b]=1;  
        for(i=1;i<=n;i++)
        {
            if(flag[i][0]==0) f[i][0]=f[i-1][0];//处理边界
            else break;//如果(i,0)是马的控制点则到达此点的路线为0,且i+1到n之后点都无法到达 
        }
        for(i=1;i<=m;i++)
        {
            if(flag[0][i]==0) f[0][i]=f[0][i-1];
            else break;//如果(0,i)是马的控制点则到达此点的路线为0,且i+1到n之后点都无法到达 
        }
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                if(flag[i][j]==1) continue;//标记点 
                f[i][j]=f[i-1][j]+f[i][j-1];//到达上点与左点的路线之和 
            }
        }
        printf("%lld",f[n][m]);
        return 0;  //不要省掉return 0  
    }
  • 相关阅读:
    第一次博客作业
    第一次软工作业
    第一次博客作业
    MySQL查看当前用户
    JSP官方文档(JavaServer Pages Specification)下载
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
  • 原文地址:https://www.cnblogs.com/hrlsm/p/13357552.html
Copyright © 2020-2023  润新知