题目传送
在中国象棋中,马是走日字的。一个马的管辖范围指的是当前位置以及一步之内能走到的位置,下图的绿色旗子表示马能走到的位置。

如果一匹马的某个方向被蹩马脚,它就不能往这个方向跳了,如下图所示,海星的位置存在旗子,马就不能往上跳到那两个位置了:

那么问题来了,在一个 n×m 的棋盘内,如何用最少的马管辖住所有 n×m 个格子。比如 n=m=3 时,最少要用 5 只马才能管辖所有棋盘,一种可能的方案如下:

当 n=m=5 时,请你求出用最少马管辖的 方案个数。

分析:
其实一开始我以为对于3*3的棋盘,两匹马不就够了吗,两匹马的情况下就能覆盖全部的位置;但是题目给的是5匹马;那么题意应是在马跳一次的前提下(以马当前所在的位置,朝8个方向跳一次),能够覆盖全盘的最少马管辖的 方案个数

那么暴力一下就更好了,一般来说10s只能是可以出答案的,还有一个地方就是这个马好像走的是“目”……

说一下怎么暴力吧,说是用到了二进制,怎么个用法呢
我们来看一下下面的数值:
(1)10=(0001)2(1)_{10}=(0001)_2(1)10​=(0001)2​
(2)10=(0010)2(2)_{10}=(0010)_2(2)10​=(0010)2​
(3)10=(0011)2(3)_{10}=(0011)_2(3)10​=(0011)2​
(4)10=(0100)2(4)_{10}=(0100)_2(4)10​=(0100)2​
………………
(15)10=(1111)2(15)_{10}=(1111)_2(15)10​=(1111)2​
在10进制转二进制你会发现我们只需要用到15,就能将4个位置的放置情况枚举出来(1代表有,0代表没有),那么题目中是5*5的方格,那么我们该怎么去枚举情况呢;
其实很简单,我们把这个5*5个方格,也就是25个方格想象成25个位置不就好了,这样我们只需要暴力枚举225的放置情况就好了

具体情况看代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int N = 1e5 + 10;
const int mod = 1e9+7;
int a[30];
int g[10][10];
int minv=inf;
int dx[]={-2,-2,-1,1,2,2,1,-1};//马跳的情况
int dy[]={-1,1,2,2,1,-1,-2,-2};
int pdx[]={-1,-1,0,0,1,1,0,0};//马蹩腿的方向
int pdy[]={0,0,1,1,0,0,-1,-1};int Arrange(int X){int cnt=0;for(int i=1;i<=5;i++){for(int j=1;j<=5;j++){if(X%2)//利用二进制的特点安排马的放置情况g[i][j]=1;elseg[i][j]=0;cnt+=g[i][j];X/=2;}}if(cnt>minv)//算是一个剪枝吧return 0;for(int i=1;i<=5;i++){for(int j=1;j<=5;j++){if(g[i][j]==1){//当前位置有放置的马for(int k=0;k<8;k++){int x=i+dx[k],y=j+dy[k];int tx=i+pdx[k],ty=j+pdy[k];if(x>5 || x<1 || y>5 || y<1) continue;if(tx>5 || tx<1 || ty>5 || ty<1) continue;if(g[tx][ty]==1) continue;//已放置马了就不需要标记了if(g[x][y]==0) g[x][y]=2;//标记一下,说明有一匹马可以通过走日到达,标记符号可以用1之外的数字,这里我用的是2}}}}for(int i=1;i<=5;i++){for(int j=1;j<=5;j++){if(g[i][j]==0){return 0;}}}minv=cnt;return cnt;
}
int main()
{int ub=(1<<25);for(int i=1;i<ub;i++){int t=Arrange(i);//枚举所有的情况if(t)a[t]++;}for(int i=1;i<=25;i++)if(a[i])cout<<a[i]<<endl;return 0;
}

马的管辖 计蒜客 - A2223相关推荐

  1. 计蒜客 挑战难题 爬楼梯

    计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...

  2. 无脑博士的试管们java_计蒜客 无脑博士和他的试管们

    标签: 无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直 ...

  3. 最短路(遍历边)计蒜客—DD坐地铁

    题目: C 城有 n 个站点, m 条双向地铁,每条地铁有一个 companyicompany_icompanyi​表示它的公司,如果连续乘坐同一家公司的地铁只要花 1元钱就好.DD现在想出门找萨摩耶 ...

  4. K - Triangle 计蒜客 - 42405

    K - Triangle 计蒜客 - 42405 题意: 给你一个三角形的三点,再给你三角形边上一个点,让你求另一个点(也要在三角形上),使得平分三角形的面积 题解: 计算几何 三角形的三边ab,ac ...

  5. H - Prince and Princess 计蒜客 - 42402

    H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...

  6. C - Digital Path 计蒜客 - 42397 05-29

    C - Digital Path 计蒜客 - 42397 题意: 题意就是给出一个n ∗ m的数字矩阵每个矩阵元素之间只能上下左右走,而且下一个位置必须比当前位置的数字大1,入口和出口必须数边缘元素, ...

  7. 计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...

    在人才招聘领域存在这样一个怪圈,高校每年都说是最难就业年.人才过剩,而对于企业HR来说永远都招不到称心如意的人才.这个怪圈在"计蒜客"创始人俞昊然看来,主要是因为当今高校的教学资源 ...

  8. 计蒜客 - T1012 A*B问题

    计蒜客 - T1012 A*B问题 相信你已经学会 A+B 问题了,那么问题又来了- 输入两个正整数 A 和 B ,求 A×B. 输入格式 一行,包含两个正整数 A 和 B,中间用单个空格隔开. 1≤ ...

  9. 计蒜客网站 ACM-ICPC亚洲区赛题

    The Preliminary Contest for ICPC China Nanchang National Invitational(2019) ACM-ICPC Jiaozuo Onsite ...

最新文章

  1. 程序开发工具java_15款Java程序员必备的开发工具
  2. docker 集群中文件挂载的问题
  3. Oracle connet by prior 关键字的简单介绍和用法
  4. 索引导航-第三版-pyhui
  5. java函数返回多个值_深入理解被调函数与主调函数之间的传值、传址、值返回、址返回...
  6. 计算广告(computational advertising)
  7. goods购物表MySQL的代码_python采用sqlachmy购物商城
  8. windows7 shift+右键 “在此处打开命令窗口”
  9. 表格不换行_Excel表格如何强制换行?8个Excel实用小技巧,帮助你解放双手
  10. mac 10.9 安装 mysql_mac 下安装 mysql (蛋疼)
  11. TCP协议以及TCP的三次握手和四次挥手
  12. emq mysql消息存储_EMQ X 规则引擎系列(二)存储消息到 MySQL 数据库
  13. map和json数组以及JSON对象和的区别以及相互转换
  14. E: Unable to locate package mingw32
  15. 诛仙服务器不显示网速,诛仙2解决游戏网速三部曲
  16. 2022.04.10-高宝琪毕设阶段性汇报
  17. incsgo 可直接取回最好的国内CSGO饰品皮肤开箱网站
  18. Jieba分词的准确率提升:使用paddle模式进行分词(使用百度飞桨深度学习模型进行分词)
  19. maven私有仓库的搭建——nexus的安装
  20. 连接Ubuntu 出现 Algorithm Negotiation failed 错误

热门文章

  1. 家庭医生签约健康管理服务系统平台解决方案
  2. 小爱同学调用系统接口,语音下发任务
  3. 看魔乐科技消息传送笔记
  4. PaddlePaddle测试模型报Intel MKL function load error: cpu specific dynamic library is not loaded.
  5. 常见的电子元器件的代表字母
  6. 浏览器前缀/ css3 渐变 /
  7. loginsight,一款通用的日志分析工具
  8. 想调戏 modbus 吗?(哈哈) 就用它——MThings
  9. PMP 考点 第十三章 项目相关方管理
  10. PCB生产文件输出(Gerber、钻孔、网表、贴片坐标)