9 条题解

  • 5
    @ 2022-8-13 14:29:57

    本蒟蒻觉得这题不是很难 废话不多说,直接上代码。-_-

    #include<bits/stdc++.h>
    using namespace std;
    
    typedef long long ull;//对long long 的自定义
    
    const int fx[]={0 , -2, -1, 1, 2, 2, 1, -1, -2};
    const int fy[]={0 , 1, 2, 2, 1, -1, -2, -2, -1};
    int bx,by,mx,my;
    
    ull f[30][30];
    bool s[30][30];
    
    int main(){
    	cin.tie(0);
    	cout.tie(0);//加速读写,输出
    	cin>>bx>>by>>mx>>my;
    	bx+=2, by+=2, mx+=2, my+=2;
    	f[2][2]=1;
    	for(int i=0;i<=8;i++)
    		s[fx[i]+mx][fy[i]+my]=1;	
    	for(int i=2; i<=bx; i++){
    		for(int j=2; j<=by; j++){
    			if(s[i][j]==1)
    				continue;
    			f[i][j]=max(f[i][j],f[i-1][j]+f[i][j-1]);
    		}
    	}	
    	cout<<f[bx][by];
    	return 0;
    }
    

    就是简单嘛

    • 2
      @ 2023-8-23 10:23:00
      #include<iostream>
      #include<string>
      #include<algorithm>
      #define ll long long
      using namespace std;
       
      const int fx[] = { 0,-2,-1,1,2,2,1,-1,-2 };
      const int fy[] = { 0,1,2,2,1,-1,-2,-2,-1 };
      //马可以走到的位置
       
      int bx, by, nx, my;
      ll lj[40][40];
      bool s[40][40];//判断这个点能不能走
       
      int main()
      {
      	//c scanf输入数据 printf输出数据
      	cin >> bx >> by >> nx >> my;
      	bx += 2; by += 2; nx += 2; my += 2;
      	lj[1][2] = 1;//初始化让lj[2][2]=1;
      	s[nx][my] = 1;
      	for (int i = 1; i <= 8; i++)
      	{
      		s[nx + fx[i]][my + fy[i]] = 1;
      	}
      	for(int i=2;i<=bx;i++)
      		for (int j = 2; j <=by; j++)
      		{
      			if (s[i][j])
      			{
      				continue;//lj[i][j] = 0;
      			}
      			lj[i][j] = lj[i - 1][j] + lj[i][j - 1];
      		}
      	cout << lj[bx][by] << endl;
      	//return 0;
      }
      // 
      //     	   __  __          __  
      //  	  / / / /_  ______/ /________ 
      //       / /_/ / / / / __  / ___/ __ \
      //  	/ __  / /_/ / /_/ / /  / /_/ /
      //     /_/ /_/\__, /\__,_/_/   \____/ 
      //           /____/                   
      // 
      
      • 0
        @ 2023-10-7 22:05:07
        #include<bits/stdc++.h>
        using namespace std;
        typedef long long ull;
        const int fx[]={0 , -2, -1, 1, 2, 2, 1, -1, -2};
        const int fy[]={0 , 1, 2, 2, 1, -1, -2, -2, -1};
        int bx,by,mx,my;
        ull f[30][30];
        bool s[30][30];
        int main(){
        	cin.tie(0);
        	cout.tie(0);
        	cin>>bx>>by>>mx>>my;
        	bx+=2, by+=2, mx+=2, my+=2;
        	f[2][2]=1;
        	for(int i=0;i<=8;i++)
        		s[fx[i]+mx][fy[i]+my]=1;	
        	for(int i=2; i<=bx; i++){
        		for(int j=2; j<=by; j++){
        			if(s[i][j]==1)
        				continue;
        			f[i][j]=max(f[i][j],f[i-1][j]+f[i][j-1]);
        		}
        	}	
        	cout<<f[bx][by];
        	return 0;
        }
        
        • 0
          @ 2023-10-6 11:27:11
          using namespace std;
          int a[10000][10000];//表示到达每个坐标的走法 
          int g[10000][10000];//这个数组用来保存被马控制的点,控制了为1,没被控制为0 
          int main(){
          	int n,m,x,y,x1,y1;
          	int h[8]={-2,-1,1,2,2,1,-1,-2};
          	int l[8]={-1,-2,-2,-1,1,2,2,1};//用两个一位数组表示马向八个方向移动的变化方式 
          	cin>>n>>m>>x>>y;
          	for(int i=0;i<8;i++){//循环的方式来实现马向八个方向移动 
          		x1=x+h[i];
          		y1=y+l[i];//计算出新的马控制坐标 
          		if(x1>=0&&x1<=n&&y1>=0&&y1<=m) g[x1][y1]=1;//如果新坐标在棋盘内部,那么标记此处被马控制 
          	}
          	g[x][y]=1;//注意:马本身的位置也被控制 
          	a[0][0]=1;//递推的初始条件 
          	if(g[0][0]==1) a[0][0]=0;//特殊情况,马本身就在起点,则初始的走法就为0 
          	for(int i=0;i<=n;i++){
          		for(int j=0;j<=m;j++){//双重循环 
          			if(g[i][j]==1) a[i][j]=0;//如果改点被马控制,则走法为0 
          			else if(i==0&&j>0)//如果在第一行,并且从第二列开始
          				a[i][j]=a[i][j-1];//则他的走法等于它左边那个点 
          			else if(j==0&&i>0)//如果在第一列,并且从第二行开始
          				a[i][j]=a[i-1][j];//它的走法等于他上边的两个点 
          			else if(i>0&&j>0)//其它的点,并且不在第一行和第一列
          				a[i][j]=a[i-1][j]+a[i][j-1];//则走法等于上边的点+左边的点 
          		}
          	}
          	cout<<a[n][m];//输出结果 
          	return 0;
          }
          
          • -1
            @ 2023-5-3 9:16:35

            #include<bits/stdc++.h> long long a,b,f[31][31],c,d,k[31][31]; using namespace std; int main(){ cin>>a>>b>>c>>d; k[c][d]=1; if(c+2<=a&&d-1>=0) k[c+2][d-1]=1; if(c+2<=a&&d+1<=b) k[c+2][d+1]=1; if(c-2>=0&&d+1<=b) k[c-2][d+1]=1; if(c-2>=0&&d-1>=0) k[c-2][d-1]=1; if(c+1<=a&&d-2>=0) k[c+1][d-2]=1; if(c+1<=a&&d+2<=b) k[c+1][d+2]=1; if(c-1>=0&&d-2>=0) k[c-1][d-2]=1; if(c-1>=0&&d+2<=b) k[c-1][d+2]=1; for(int i=0;i<=a;i++){ if(k[i][0]==1) break; else f[i][0]=1; } for(int j=0;j<=b;j++){ if(k[0][j]==1) break; else f[0][j]=1; } for(int i=1;i<=a;i++){ for(int j=1;j<=b;j++){ if(k[i][j]==1) f[i][j]==0; else f[i][j]=f[i-1][j]+f[i][j-1]; }

            }
            	
            cout<<f[a][b]<<endl;
            
            return 0;
            

            }

            • ~就是简单嘛~ *
            • -3
              @ 2023-3-19 10:36:46

              #include<bits/stdc++.h> using namespace std; typedef long long ull; const int fx[]={0,-2,-1,1,2,2,1,-1,-2}; const int fy[]={0,1,2,2,1,-1,-2,-2,-1}; int bx,by,mx,my; ull f[30][30]; bool s[30][30]; int main() { cin.tie(0); cout.tie(0); cin>>bx>>by>>mx>>my; bx+=2, by+=2,mx+=2,my+=2; f[2][2]=1; for(int i=0;i<=8;i++) s[fx[i]+mx][fy[i]+my]=1; for(int i=2; i<=bx; i++) { for(int j=2;j<=by;j++) { if(s[i][j]==1) continue; f[i][j]=max(f[i][j],f[i-1][j]+f[i][j-1]); } } cout<<f[bx][by]; return 0; }

              • -4
                @ 2022-11-30 19:24:31

                添加了注释

                #include<iostream>
                using namespace std;
                long B[21][21];//定义棋盘 
                
                int main(){
                	int n,m;//目标点的坐标
                	int a,b;//马所在点的坐标
                	
                	cin>>n>>m>>a>>b;
                	
                	//初始化棋盘:假设到达目标点(n,m)前每个点都可以通行设置成1
                	for(int i=0;i<=n;i++) 
                		for(int j=0;j<=m;j++)
                			B[i][j]=1;
                			
                	//将马控制的点设置成0,代表不能通过
                	//控制马上边的4个点,只要不超过边届,则为控制点  
                	if(a-2>=0&&b-1>=0)  
                		B[a-2][b-1]=0; 
                		    
                	if(a-2>=0&&b+1<=m)   
                		B[a-2][b+1]=0; 
                		 
                	if(a-1>=0&&b-2>=0)  
                		B[a-1][b-2]=0; 
                		 
                	if(a-1>=0&&b+2<=m)  
                		B[a-1][b+2]=0; 
                	
                	//马下边的4个点,只要不超过边届,则为控制点	  
                	if(a+1<=n&&b-2>=0)  
                		B[a+1][b-2]=0; 
                	
                	if(a+2<=n&&b-1>=0)  
                		B[a+2][b-1]=0;  
                		
                	if(a+1<=n&&b+2<=m)  
                		B[a+1][b+2]=0;  
                		
                	if(a+1<=n&&b+1<=m)  
                		B[a+2][b+1]=0;
                	
                	//马所在点不能	  
                	B[a][b]=0;  
                	
                	for(int i=0;i<=n;i++){
                		for(int j=0;j<=m;j++){
                			//如果可行 
                			if(B[i][j]){
                				
                				 if(i==0&&j==0)
                				  continue;  
                            	 		else if(i==0)  
                					B[i][j]=B[i][j-1]; //目标点在最上面一行的时候 
                            	 		else if(j==0)  
                					 B[i][j]=B[i-1][j];//目标点在最左边一行 
                            	 		else 
                					B[i][j]=B[i-1][j]+B[i][j-1];//到达目标点路径=上点路径+左点路径 
                				
                			}
                		}
                	}
                	
                	cout<<B[n][m]<<endl;
                	 
                }
                
                • -4
                  @ 2022-11-5 13:43:56

                  ??

                  • -7
                    @ 2022-12-16 17:09:10

                    ??

                    • 1

                    信息

                    ID
                    224
                    时间
                    1000ms
                    内存
                    16MiB
                    难度
                    5
                    标签
                    递交数
                    102
                    已通过
                    40
                    上传者