交换游戏 (记忆化搜索 状压)
链接:https://ac.nowcoder.com/acm/contest/4462/C
来源:牛客网交换游戏
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld题目描述
一列上有12个孔,这12个孔中有些孔被遮挡住了。
假定我们用 '-' 来表示没被遮挡住的孔,用 'o' 来表示被遮挡住的孔。
如果相邻的三个孔有两个孔被遮挡,并且被遮挡的两个孔相邻,就是 '-oo' 和 'oo-'。
对于这样的三个孔,我们可以将中间的孔的遮挡物移开,代价是将一端的遮挡物移到另一端没有被遮挡的孔上面。
对于一列给定的孔,你的任务是制定操作的顺序,使得最后剩余的被遮挡的孔的个数最少,并输出最后剩余的被遮挡的孔的个数。
输入描述:
第一行输入一个n,n≤105n, n \le 10^5n,n≤105。
接下来n行,每行12个字符,代表孔的状态。
输出描述:
对于每行输入在一行中输出一个数字代表答案。示例1
输入
复制5 ---oo------- -o--o-oo---- -o----ooo--- oooooooooooo oooooooooo-o
5 ---oo------- -o--o-oo---- -o----ooo--- oooooooooooo oooooooooo-o输出
复制1 2 3 12 1
1 2 3 12 1
一共12个孔,只有2^12=4096种情况,但是查询次数很多,我们可以考虑用二进制1和0表示‘o’和‘-’两种状态,进行状态压缩,用一个二进制数代表一种情况。然后再在记忆化搜索的过程中把已知情况的答案记录下来,方便下次直接用。
搜索的时候就找 '-oo' 和 'oo-',注意到它们有共同点:中间是1,两边不相同。“将中间的孔的遮挡物移开,将一端的遮挡物移到另一端没有被遮挡的孔上面。”其实就是把中间的1变为0,再把两边互换,对于二进制数011和110,我们只要将它^111即异或7(1和0异或上0不变,异或1则可互换)
来自官方题解
附加:运算符优先级
#include<bits/stdc++.h> using namespace std; int f[1<<12]; int n; char s[20]; int dfs(int x) {if(f[x]||x==0) return f[x];int ans=0;for(int i=0;i<12;i++){if(x>>i&1) ans++;}for(int i=0;i<10;i++){if( x>>i+1&1 && x>>i&1 ^ x>>i+2&1) ans=min(ans,dfs(x^(7<<i)));//主要运算优先级 +》<< 》& 》 ^ 》 && }f[x]=ans;return ans; } int main() {scanf("%d",&n);while(n--){scanf("%s",s);int x=0;for(int i=0;i<12;i++){x=(x<<1)+(s[i]=='o'? 1:0);}printf("%d\n",dfs(x));} }
交换游戏 (记忆化搜索 状压)相关推荐
- [JSOI2009]密码——AC自动机+记忆化搜索(状压)
题面 Bzoj1559 解析 要求一个能包含所有字符串的串的个数,联想到AC自动机. 每一个节点需要存一个终点信息,即以这个点为结尾的字符串编号,这个需要开一个vector来存,因为一个节点需要继承 ...
- UVA - 10118 Free Candies(记忆化搜索/状压)
传送门 方法一 一开始我确实是这样想的,设d[i][j][k][p][S]d[i][j][k][p][S]d[i][j][k][p][S]为四堆分别拿了i,j,k,pi,j,k,pi,j,k,p个,当 ...
- 洛谷P1057 传球游戏(记忆化搜索)
点我进入题目 题目大意:n个小孩围一圈传球,每个人可以给左边的人或右边的人传球,1号小孩开始,一共传m次,请问有多少种可能的路径使球回到1号小孩. 输入输出:输入n,m,输出路径的数量. 数据范围:4 ...
- 「THUPC2018」生生不息 / Lives(状压 + 记忆化搜索 + 打表)
题目链接:https://loj.ac/problem/6398 题目大意: 生命游戏是一个经典的零玩家游戏. 游戏在一块 n \times mn×m 的方格棋盘上进行,初始时,棋盘上的一些格子中有生 ...
- [蓝桥杯][算法提高VIP]Sharing Chocolate(状压dp记忆化搜索)
题目描述 每天,巧克力在它的许多形式上被全世界数百万人分享.它是一个真正普遍的糖果,实际上在世界上每个国家都能得到. 你发现唯一比吃巧克力更好的事情是把它分享给朋友.不幸的是,你的朋友非常挑剔,有着不 ...
- [蓝桥杯][算法提高VIP]金陵十三钗(状压dp记忆化搜索)
题目描述 在电影<金陵十三钗>中有十二个秦淮河的女人要自我牺牲代替十二个女学生去赴日本人的死亡宴会.为了不让日本人发现,自然需要一番乔装打扮.但由于天生材质的原因,每个人和每个人之间的相似 ...
- 海贼王之伟大航路——状压记忆化搜索
海贼王之伟大航路 题意: 一共 n 个点,给定任意两点的距离 dis[i,j]dis[i, j]dis[i,j]. 问,从点 1 到点 n,中途所有节点经过且仅经过一次,距离最短为多少? (2< ...
- 第23次CSP认证 第4题 收集卡牌(记忆化搜索,状压)
链接:http://118.190.20.162/view.page?gpid=T132 思路:先写一个暴力搜索,然后把中间结点的状态存起来,就是记忆化搜索,状态要存搜索到的层数和选择的卡牌数,0代表 ...
- 牛客国庆集训派对Day2: E. 数据排序(状压DP+记忆化搜索)
E. 数据排序 题目描述 机器学习通常需要用到大量的人工标注好的数据进行训练.现在有这么一个数据集,有 N 个张照片,每张照片中都有一个模特.某个研究员想要训练一个机器学习算法,能够根据照片对模特的魅 ...
最新文章
- 青茶什么时候拆_为什么日本绿茶那么绿?比中国的高级绿茶还要绿
- C语言单片机等待询问_单片机很好玩8,温度太高就报警,制作一个智能室内温度湿度计...
- 用数据来证明累计充值赠送活动
- CentOS6.5下的Nagios安装配置详解(图文)
- 【PyQt】分析承载界面
- 达奇机器人怎么看电量_圣诞怎么过?看看电影吃点儿特别的
- 2021年最好用的5个股票API
- PTA 10-99 3-1-(b) 查询st1制片公司的总裁
- android View和ViewGroup创建以及绘制流程
- 高速CAN收发器TJA1043的状态机
- oracle数据库小记
- Java菜鸟学习日记7
- C++函数指针与成员函数指针
- 计算机上面的按键作用,鼠标侧键有什么用 鼠标上各按键的功能是什么
- 电脑从新分盘(软件)
- 为什么下载了SQL Server却没有sql配置管理器
- 【转】关于软件外包企业如何建立员工归属感的问题
- java去除音频无声_如何给视频消音 把视频中的声音去掉只留视频画面
- python语言是非跨平台语言_Python语言初探【转载】
- 电子科大计算机科学与技术高考分数,2021四川省高考分数线公布,总分达不到这个数,考电子科大有点悬...