3 条题解

  • 0
    @ 2023-11-11 20:06:30
    #include<bits/stdc++.h>
    using namespace std;
    bool ma(int x,int y,int mx,int my)
    {
        if((abs(x-mx)==1 && abs(y-my)==2) || (abs(y-my)==1 && abs(x-mx)==2) || (y==my && x==mx))
            return 1;
        return 0;
      
    }
    long long f[25][25];
    int main()
    {
        int x,y,mx,my;cin >> x >> y >> mx >> my;
        for(int i=0;i<=x;i++)
        {
            for(int j=0;j<=y;j++)
            {
            if(ma(i,j,mx,my))
                f[i][j] = 0;//马可到达
            else if(j==0 && i==0)
                f[i][j] = 1;//坐标原点
            else if(j==0)
                f[i][j] = f[i-1][j];//左边缘
            else if(i==0)
                f[i][j] = f[i][j-1];//上边缘
            else
                f[i][j] = f[i-1][j]+f[i][j-1];//中间
            }
        }
        cout << f[x][y];
        return 0;
    }
    

    一定用long long否则60分

    • 0
      @ 2023-11-10 22:31:29
      #include <bits/stdc++.h>
      long long bx,by,mx,my,a[25][25];
      int horse(int x,int y){
          if(abs(x-mx)==2&&abs(y-my)==1||
             abs(x-mx)==1&&abs(y-my)==2)return 1;
          if(x==mx&&y==my)return 1;
          return 0;}
      int main(){
          std::cin>>bx>>by>>mx>>my;
          for(int i=0;i<=bx;i++){
              for(int j=0;j<=by;j++){
                  if(horse(i,j))a[i][j]=0;
                  else if(i==0&&j==0)a[i][j]=1;
                  else if(i==0)a[i][j]=a[i][j-1];
                  else if(j==0)a[i][j]=a[i-1][j];
                  else a[i][j]=a[i][j-1]+a[i-1][j];}}
          std::cout<<a[bx][by]; return 0;}
      
      • -1
        @ 2023-12-9 20:44:52
        #include<iostream>
        int bx,by,mx,my;
        long long f[21][21];
        bool check(int x,int y)
        {
            if(abs(x-mx)==1&&abs(y-my)==2||abs(x-mx)==2&&abs(y-my)==1)return true;
            else if(x==mx&&y==my)return true;
            else return false;
        }
        int main()
        {
            std::cin>>bx>>by>>mx>>my;
            for(int i=0;i<=bx;i+=1)for(int j=0;j<=by;j+=1)if(check(i,j))f[i][j]=0;else if(i==0&&j==0)f[i][j]=1;else if(i==0)f[i][j]=f[i][j-1];else if(j==0)f[i][j]=f[i-1][j];else f[i][j]=f[i-1][j]+f[i][j-1];
            std::cout<<f[bx][by];
        }
        
        • 1

        信息

        ID
        568
        时间
        1000ms
        内存
        128MiB
        难度
        6
        标签
        递交数
        358
        已通过
        112
        上传者