2 条题解

  • 1
    @ 2024-12-17 13:33:52
    #include <iostream>
    #define int long long
    using namespace std;
    const short dir[8][2] = { {1 , 2} , {1 , -2} , {2 , 1} , {2 , -1} , {-1 , 2} , {-1 , -2} , {-2 , 1} , {-2 , -1} };
    bool d[30][30];
    int dp[30][30] , n , m , x , y;
    signed main(){
        cin >> n >> m >> x >> y;
        d[x][y] = 1;
        for(int i = 0 ; i < 8 ; i++){
            int tx = x + dir[i][0],ty = y + dir[i][1];
            if(tx >=  0  &&  tx <= n  &&  ty >=  0  &&  ty <= m) 
    			d[tx][ty] = 1;
        }
        dp[0][0] = 1;
        for(int i = 0 ; i <= n ; i++)
            for(int j = 0;j <= m;j++)
                if(!d[i][j]){
                    if(i) 
    					dp[i][j] +=  dp[i-1][j];
                    if(j) 
    					dp[i][j] +=  dp[i][j-1];
                }
        cout << dp[n][m] << endl;
        return 0;
    }
    
    • -1
      @ 2023-4-4 22:31:54

      一道比较入门的dp题. 答案可能很大,所以记得开 long long.

      #include<iostream>
      #include<cstring>
      #include<cstdio>
      #include<algorithm>
      using namespace std;
      const int fx[9] = {0, -2, -1, 1, 2, 2, 1, -1, -2};
      const int fy[9] = {0, 1, 2, 2, 1, -1, -2, -2, -1};
      int bx, by, mx, my;
      long long f[40][40];
      bool s[40][40];
      int main()
      {
          scanf("%d%d%d%d",&bx,&by,&mx,&my);
          bx=bx+2; 
          by=by+2; 
          mx=mx+2;
          my=my+2;
          f[2][1]=1;
          s[mx][my]=1;
          for(int i=1;i<=8;i=i+1)s[mx+fx[i]][my+fy[i]]=1;
          for(int i=2;i<=bx;i=i+1)
          {
              for(int j=2;j<=by;j=j+1)
              {
                  if(s[i][j]) continue;
                  f[i][j]=f[i-1][j]+f[i][j-1];
              }
          }
          printf("%lld\n", f[bx][by]);
          return 0;
      } 
      
    • 1

    信息

    ID
    659
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    77
    已通过
    49
    上传者