6 条题解

  • 1
    @ 2025-5-14 22:09:23
    #include<bits/stdc++.h>
    using namespace std;
    #define LL long long
    //过河卒 。 
    const int N = 1e5 + 10;
    const int M = 5e4 + 10;
    const int INF = 0x3f3f3f3f;
    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;
        //cout << dp[0][0];
        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;
        //cout << M << " " << N;
        return 0;
    }
    //菜鸟驿站
    //老六专属
    
    
    • 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;
      }
      
      • 0
        @ 2026-3-29 12:18:10

        #include using namespace std; int n, m, cx, cy; int main() { cin >> n >> m >> cx >> cy;

        bool blocked[25][25] = {false};
        blocked[cx][cy] = true;
        
        int dx[] = {2, 2, -2, -2, 1, 1, -1, -1};
        int dy[] = {1, -1, 1, -1, 2, -2, 2, -2};
        
        for (int i = 0; i < 8; ++i) {
            int nx = cx + dx[i];
            int ny = cy + dy[i];
            if (nx >= 0 && nx <= n && ny >= 0 && ny <= m) {
                blocked[nx][ny] = true;
            }
        }
        
        long long dp[25][25] = {0};
        dp[0][0] = 1;
        
        for (int j = 1; j <= m; ++j) {
            if (!blocked[0][j]) {
                dp[0][j] = dp[0][j-1];
            }
        }
        
        for (int i = 1; i <= n; ++i) {
            if (!blocked[i][0]) {
                dp[i][0] = dp[i-1][0];
            }
        }
        
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                if (!blocked[i][j]) {
                    dp[i][j] = dp[i-1][j] + dp[i][j-1];
                }
            }
        }
        
        cout << dp[n][m] << endl;
        

        return 0; }
        //supermonkey 布置的7891978作业(MAN)

        • 0
          @ 2026-3-29 12:17:52

          #include using namespace std; int n, m, cx, cy; int main() { cin >> n >> m >> cx >> cy;

          bool blocked[25][25] = {false};
          blocked[cx][cy] = true;
          
          int dx[] = {2, 2, -2, -2, 1, 1, -1, -1};
          int dy[] = {1, -1, 1, -1, 2, -2, 2, -2};
          
          for (int i = 0; i < 8; ++i) {
              int nx = cx + dx[i];
              int ny = cy + dy[i];
              if (nx >= 0 && nx <= n && ny >= 0 && ny <= m) {
                  blocked[nx][ny] = true;
              }
          }
          
          long long dp[25][25] = {0};
          dp[0][0] = 1;
          
          for (int j = 1; j <= m; ++j) {
              if (!blocked[0][j]) {
                  dp[0][j] = dp[0][j-1];
              }
          }
          
          for (int i = 1; i <= n; ++i) {
              if (!blocked[i][0]) {
                  dp[i][0] = dp[i-1][0];
              }
          }
          
          for (int i = 1; i <= n; ++i) {
              for (int j = 1; j <= m; ++j) {
                  if (!blocked[i][j]) {
                      dp[i][j] = dp[i-1][j] + dp[i][j-1];
                  }
              }
          }
          
          cout << dp[n][m] << endl;
          

          return 0; }
          //supermonkey 布置的7891978作业(MAN)

          • -1
            @ 2025-4-12 10:52:04
            #include<iostream>
            using namespace std;
            const int N=20+10;
            int n,m,x,y;
            bool v[N][N];
            long long a[N][N];
            int dx[]={0,-1,-2,-2,-1,1,2,2,1};
            int dy[]={0,-2,-1,1,2,2,1,-1,-2};
            void init(){
            	for(int i=0;i<=8;i++){
            		int xx=x+dx[i];
            		int yy=y+dy[i];
            		if(xx>=0&&xx<=n&&yy>=0&&yy<=n){
            			v[xx][yy]=1;
            		}
            	}
            	for(int i=0;i<=m;i++){
            		if(v[0][i]==0){
            			a[0][i]=1;
            		}else{
            			break;
            		}
            	}
            	for(int i=0;i<=n;i++){
            		if(v[i][0]==0){
            			a[i][0]=1;
            		}else{
            			break;
            		}
            	}
            }
            int main(){
            	cin>>n>>m>>x>>y;
            	init();
            	for(int i=1;i<=n;i++){
            		for(int j=1;j<=m;j++){
            			if(v[i][j]==0){
            				a[i][j]=a[i-1][j]+a[i][j-1];
            			}
            		}
            	}
            	cout<<a[n][m];
            }
            
            
            
            
            
            
            
            
            • -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
            难度
            7
            标签
            递交数
            301
            已通过
            80
            上传者