zoukankan      html  css  js  c++  java
  • 2019 蓝桥杯省赛 B 组模拟赛 结果填空:马的管辖

    题意

    每匹马在不蹩脚的情况下能跳到的地方就是该马能管辖的范围,问在5*5的格子下至少需要多少匹马能管辖到所有格子。

    思路

    二进制枚举每一种情况,分开讨论。

    #include<bits/stdc++.h>
    
    using namespace std;
    int n,m;
    int g[6][6],vis[6][6];
    int dx[8]={-2,-1,2,1,-2,1,2,-1};
    int dy[8]={-1,-2,-1,2,1,-2,1,2};
    int fx[4]={-1,0,1,0};
    int fy[4]={0,-1,0,1};
    
    bool check(int x,int y){
    	if(x>=0&&x<n&&y>=0&&y<m) return 1;
    	else return 0;
    }
    
    int main(){
    	n=5,m=5;
    	int r=n*m;
    	int res=0;//马的数量
    	int cnt=0;//覆盖的格子数量
    	int minn=25;//马最小数量 
    	int ans=0;//方案数 
    	for(int i=0;i<(1<<r);i++){//枚举方案数 
    		res=cnt=0;
    		memset(g,0,sizeof(g));
    		memset(vis,0,sizeof(vis));
    		for(int j=0;j<r;j++){//遍历二进制的每一位 
    			if(i&(1<<j)){//判断该位是否存在 
    				g[j/n][j%m]=1;
    				vis[j/n][j%m]=1;
    				res++;cnt++;
    			}
    		}
    		if(res>minn) continue; 
    		for(int j=0;j<n;j++){
    			for(int k=0;k<m;k++){
    				if(g[j][k]){
    					for(int kk=0;kk<4;kk++){
    						int mx=j+fx[kk];
    						int my=k+fy[kk];
    						if(check(mx,my)&&!g[mx][my]){//判断是否蹩脚 
    							for(int h=kk;h<8;h+=4){
    								int nx=j+dx[h];
    								int ny=k+dy[h];
    								if(check(nx,ny)&&!vis[nx][ny]) {//不蹩脚马覆盖的范围 
    									vis[nx][ny]=1;
    									cnt++; 
    								}
    							}
    						}
    					}
    				}
    			}
    		}
    		if(cnt!=25) continue;
    		else {
    			if(res<minn){
    				minn=res;
    				ans=1;
    			} 
    			else if(res==minn) ans++;
    		}
    	} 
    	cout<<minn<<' '<<ans<<'
    ';
    	
    	
    	return 0;
    } 
    
    七月在野,八月在宇,九月在户,十月蟋蟀入我床下
  • 相关阅读:
    [转]html之file标签 --- 图片上传前预览 -- FileReader
    常用正则表达式
    c# color 颜色代码
    WebForm 母版页使用
    iframe同域自适应问题
    完整版AJAX
    AJAX基础
    jQuery 小特效【文本框折叠隐藏,展开显示】【下拉菜单】【颜色渐变】【弹窗+遮罩】
    JQuery中的Dom操作和事件
    LINQ 【增、删、改、查】数据绑定
  • 原文地址:https://www.cnblogs.com/voids5/p/13801072.html
Copyright © 2011-2022 走看看