学校测试-2015-03-01
记得以前做N皇后问题见到过二进制+位运算优化的方法, 今天的搜索题第三题和第四题都可以用到二进制和位运算. 就只做了这两个题目.
题目三
描述
传递游戏(pass)
Description
n个人在做传递物品的游戏,编号为1-n。
游戏规则是这样的:开始时物品可以在任意一人手上,他可把物品传递给其他人中的任意一位;下一个人可以传递给未接过物品的任意一人。
即物品只能经过同一个人一次,而且每次传递过程都有一个代价;不同的人传给不同的人的代价值之间没有联系;
求当物品经过所有n个人后,整个过程的最小总代价是多少。
Input Format
第一行为n,表示共有n个人(16>=n>=2);
以下为n*n的矩阵,第i+1行、第j列表示物品从编号为i的人传递到编号为j的人所花费的代价,特别的有第i+1行、第i列为-1(因为物品不能自己传给自己),其他数据均为正整数(<=10000)。
Output Format
一个数,为最小的代价总和。
分析
- 状压DP, 二进制表示状态(点到过或没到过), 位运算实现查找和更新等操作
f[i][k]
表示状态为 k 并且最后停留在 i 点时的最小代价- =>
min{f[i][(1<<n)+1], (0<=i<n)}
- 转移 :
枚举状态 k : 0 -> (1 << n) - 1
枚举要更新的结点 i : 0 -> n-1
枚举中间结点 j : 0 -> n-1, (i != j)
如果满足 在状态 k 中第 i 的位置为 0, 而第 j 的位置为 1, 那么就可以用 j 去更新 i.核心 :
if(i != j && (k&(1 << j)) && !(k&(1 << i))) f[i][k^(1 << i)] = min(f[i][k^(1 << i)], f[j][k] + d[j][i]);
初始化
f[i][1 << i] = 0, (0<=i<n)
表示从任意点出发
代码
https://code.csdn.net/snippets/609746
题目四
描述
皇后守卫(queen)
Description
给一个N * M的棋盘,棋盘上的有些格子被打上了标记。现在需要在其中放置尽量少的皇后,使得所有被打上标记的格子至少被某一个皇后攻击或占据到。皇后之间可以互相攻击。
Input Format
输入最多15组数据。
每组数据第一行包含两个整数N和M(1 < N, M < 10),以下为一个N行M列的棋盘,其中打上标记的格子用‘X’表示,其它格子用‘.’表示。
输入以一个0结尾。
Output Format
对于每组数据,输出一个数表示最少需要使用的皇后数目。
分析
- 二进制+位运算优化+普通最优化剪枝的 dfs
void dfs(int x, int row, int ld, int rd, int* k, int c)
x => 当前行
k => 数组, 表示当前所有被覆盖的位置, 每一行都是用二进制表示的, 所以数组只需开一维
c => 计数变量, 已经放的皇后数
主函数调用dfs(0, 0, 0, 0, k, 0)
// k 初始化全为 0- 函数执行过程
如果该状态下满足了需要, 直接更新答案后返回
如果所以行已经考虑完了(x >= n), 直接返回
最优化剪枝 : 如果当前 c 不比已经记录的 ans 更优, 直接返回
从当前行中选可以放置皇后的地方开始放皇后, 继续dfs到下一层
该行不放皇后, dfs到下一层许多精巧的位运算 :
- 判断是否满足条件, 标记的地方都被覆盖到
枚举 x, 如果所有(k[x]&tar[x]) == tar[x]
说明满足
解释 :tar[x]
表示第 x 行需要被覆盖的二进制状态. 只有当 tar[x] 为 1 的地方 k[x] 也为 1 才满足- 更新状态, 在第 x 行二进制下 p 位置放置皇后对原可覆盖状态 k 的影响
void update(int x, int p, int* k) { k[x] = upperlim; for(int i = 1; x-i >= 0; i++) {if((p<<i) < upperlim) k[x-i] |= (p<<i);if((p>>i) > 0) k[x-i] |= (p>>i);k[x-i] |= p; } for(int i = 1; x+i < n; i++) {if((p<<i) < upperlim) k[x+i] |= (p<<i);if((p>>i) > 0) k[x+i] |= (p>>i);k[x+i] |= p; } }
解释 :
upperlim = (1 << n) - 1
首先 x 行应该全变为 1, 也就是 k[x] 状态为 upperlim
再考虑对角线和列
对p的解释 : p 的二进制中只有一位为 1, 也就是皇后所在列的那一位- 其他
- ans 可以初始化为 5
在 9*9 全 ‘X’ 的棋盘上- 皇后可以互相攻击, 也就是同一行上可以有多个皇后
代码
https://code.csdn.net/snippets/609744
学校测试-2015-03-01相关推荐
- Cheatsheet: 2015 03.01 ~ 03.31
Web The Architecture of Algolia's Distributed Search Network No promises: asynchronous JavaScript wi ...
- Contest2071 - 湖南多校对抗赛(2015.03.28)
Contest2071 - 湖南多校对抗赛(2015.03.28) 本次比赛试题由湖南大学ACM校队原创 http://acm.csu.edu.cn/OnlineJudge/contest.php?c ...
- 湖南多校对抗赛(2015.03.28)
Contest2071 - 湖南多校对抗赛(2015.03.28) Contest2071 - 湖南多校对抗赛(2015.03.28) 本次比赛试题由湖南大学ACM校队原创 http://acm.cs ...
- 03/01 开例会 jim williams uw-madison
03/01 开例会 jim williams uw-madison 记录一下今天开会的过程 汇报第一个工作 是对比学校的课程表 我这周做的是对比我们学校和华大西雅图的基础cs课程 讲一下我发现的问题 ...
- 【389天】跃迁之路——程序员高效学习方法论探索系列(实验阶段146-2018.03.01)...
@(一只心中无码的程序员)专栏 实验说明 从2017.10.6起,开启这个系列,目标只有一个:通过探索新的学习方法,用2年的时间,实现2.5倍速的成长,获得普通程序员>= 5年的技术水平. 实验 ...
- 深圳计算机学校排名2015年,2015深圳各区初中最新排名,10各区学校都有
原标题:2015深圳各区初中最新排名,10各区学校都有 (家长帮)在择校过程当中,中考成绩的好坏很容易决定学生和家长的选择,不管是就近入学还是跨区入学,该学校在本区的排名是很重要的一个参考因素,所以无 ...
- 黑武器linux下载地址,酷毙了!暗黑版 Arch,BlackArch Linux 2017.03.01发布
By - 3月, 2nd 2017 作者:闻其详 Arch 是大名鼎鼎的滚动更新的 Linux 发行版,江湖上哪个不知,谁个不晓,练就顶上的 Linux 功夫基本都不会绕路于它,然而就像杂粮中出有白米 ...
- 江苏计算机专业的学校排名2015,2015关于江苏省高校排名「最新」
在2015中国大学排行榜700强中,江苏省有1所高校跻身全国十强,10所高校跻身全国百强.南京大学雄居2015江苏省最佳大学排行榜榜首,入选2015中国五星级大学,跻身中国一流大学,堪称2015江苏省 ...
- 上海计算机本科学校排名2015,2015上海大学排名大全(一流、二流、三流)
2015上海大学排名大全(一流.二流.三流) 如下为大家整理的.是2015年上海一流.二流.三流大学的排名情况,具体详情如下: 超一流大学 01.复旦大学("985"工程与&quo ...
- 邯郸计算机学校排名2015,邯郸市2014(2015、2016)年各县市区高考成绩排名
邯郸市第一中学新校区 2014年高考,邯郸市本科上线率全面提升,省级示范性高中高位增长,高分人数尤其是清华.北大录取人数倍增,这增强了本地学校的竞争力,许多家长为自己的孩子能考进优质大学开心不已.而每 ...
最新文章
- 深蓝学院的三维点云课程:第一章
- 异地多活实践与设计思考点归纳
- Opencv 数学基础--范数(17)
- 抖音很火的存钱计划,让python告诉你总共可以存到多少钱!
- python爬虫之美剧排行榜爬取(加浏览器伪装,代理,异常处理)
- 华为云GaussDB,11.11让企业无后顾之忧
- JDK1.8 中 ConcurrentHashMap源码分析(二)元素添加是线程安全的
- c++ mysql 写库 乱码 ??_mysql c++ 乱码 解决方法
- jquery的extend和fn.extend
- 2017-2018-1 20155202 《信息安全系统设计基础》第4周学习总结
- 介绍一个日志记录函数
- FPGA Vivado AXI _DMA IP介绍
- Linux下更改DNS地址
- 黑马程序员_源自梦想 GUI
- habor-deploy docker https 私有仓库搭建
- Javaweb和微信小程序项目部署阿里云服务器总结(上)
- 在指定数据的前面加“0“
- html5制作坦克大战
- 行业分析-全球与中国引风机市场现状及未来发展趋势
- Uber入驻四川乐山峨眉地区
热门文章
- 推荐一个不到300k的Gif处理神器 - Gifsicle(免费下载)
- 通过History Trends Unlimited通过统计服务器上Edge浏览器Top10网页历史访问量(2021.11.23)
- 第03课:Anaconda 与 Jupyter Notebook
- 如何解决pip更新问题
- es根据字段长度过滤_Es 根据数组长度查询
- python 空值_数据库中的空值与NULL的区别以及python中的NaN和None
- sqlserver查看跟某个表相关的所有存储过程
- go语言游戏编程-Ebiten使用矩阵实现对图的缩放和移动
- XCTF-Reverse:logmein
- 【又放洋屁了】文艺细菌发作了