https://ac.nowcoder.com/acm/contest/4462/C
题目描述:
一列上有12个孔,这12个孔中有些孔被遮挡住了。
假定我们用 ‘-’ 来表示没被遮挡住的孔,用 ‘o’ 来表示被遮挡住的孔。
如果相邻的三个孔有两个孔被遮挡,并且被遮挡的两个孔相邻,就是 ‘-oo’ 和 ‘oo-’。
对于这样的三个孔,我们可以将中间的孔的遮挡物移开,代价是将一端的遮挡物移到另一端没有被遮挡的孔上面。
对于一列给定的孔,你的任务是制定操作的顺序,使得最后剩余的被遮挡的孔的个数最少,并输出最后剩余的被遮挡的孔的个数。
输入描述:
第一行输入一n,n≤10^5 。
接下来n行,每行12个字符,代表孔的状态。

思路:因为孔的个数只有12个,但询问的次数很多,所以可以将这个包含‘-’‘o’的序列进行状态压缩,转化成一个01二进制数。从第一位开始遍历“oo”,如果“oo”有一边有‘-’,就分别dfs进下一个状态。同时在dfs过程中,记录下已知情况的答案。(因为孔只有12个所以递归的次数也不会很多,不加记忆化也可以过?)

#include<cstdio>
#include<string.h>
#include<set>
#include<algorithm>
using namespace std;
//#define int long long
#define LL long long int
const int manx=1e5+100;
const int INF=0x3f3f3f3f;
int dp[manx],vs[manx];
int dfs(int x)
{if(vs[x]||!x)return dp[x];int cnt=0;//维护最小最1的个数for(int i=0;i<12;i++)if(x&(1<<i))++cnt;for(int i=0;i<=10;i++){if((x&(1<<i))&&(x&(1<<(i+1)))){if(i>=1&&!(x&(1<<(i-1))))//遇到“-oo”cnt=min(cnt,dfs(x^(7<<(i-1))));if(i<=9&&!(x&(1<<(i+2))))//遇到“oo-”cnt=min(cnt,dfs(x^(7<<i)));}}vs[x]=1;return dp[x]=cnt;
}
int main()
{int n;char s[20];memset(dp,0,sizeof(dp));memset(vs,0,sizeof(vs));scanf("%d",&n);while(n--){int x=0;scanf("%s",s);for(int i=0;s[i]!='\0';i++)x=(x<<1)+(s[i]=='o'?1:0);printf("%d\n",dfs(x));}return 0;
}

收集纸片:https://ac.nowcoder.com/acm/contest/4462/D(状态压缩)

交换游戏(状态压缩、记忆化搜索)相关推荐

  1. 搜索问题之状态空间搜索(状态压缩+记忆化搜索+ BFS)

    文章目录 1. 前言 2. 问题举例(九宫格问题) 3. 问题分析 3.1 状态编码与解码 3.2 哈希映射 3.3 集合判重 4. 问题实现 推荐阅读 1. 前言 之前介绍的回溯法常用于 解空间的搜 ...

  2. LeetCode 464. 我能赢吗(状态压缩+记忆化递归 / 博弈)

    文章目录 1. 题目 2. 解题 1. 题目 在 "100 game" 这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和达到或超过 100 的 ...

  3. dfs记忆化搜索(带限制的选择问题) 讲解:LeetCode打家劫舍||| / 蓝桥 地宫取宝/蓝桥 k进制数//剪格子//方格分割

    记忆化递归的必要性: 普通的递归可能会重复求解某一值,类似斐波那契数列.同样的子问题可能会被求解多次,这样就会很慢很慢很慢 解决方法:我们把历史求解(子问题)记录下来,如果下次需要求解子问题,那么直接 ...

  4. 交换游戏 (记忆化搜索 状压)

    链接:https://ac.nowcoder.com/acm/contest/4462/C 来源:牛客网 交换游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...

  5. 【每日一题Day95】LC1815得到新鲜甜甜圈的最多组数 | 状态压缩dp 记忆化搜索

    得到新鲜甜甜圈的最多组数[LC1815] 有一个甜甜圈商店,每批次都烤 batchSize 个甜甜圈.这个店铺有个规则,就是在烤一批新的甜甜圈时,之前 所有 甜甜圈都必须已经全部销售完毕.给你一个整数 ...

  6. 【AcWing】数位统计DP、树形DP、状态压缩DP、记忆化搜索

    [AcWing]数位统计DP.树形DP.状态压缩DP.记忆化搜索 一.数位统计DP 二.状态压缩DP 三.树形DP 四.记忆化搜索 一.数位统计DP 计数问题 给定两个整数 a 和 b,求 a 和 b ...

  7. UVa 1252 - Twenty Questions(记忆化搜索,状态压缩dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:点击打开链接 题目大意 有n个长度为m的二进制串,每个都是不同的. 为了把所有字符串区分开,你可以询问,每次可 ...

  8. 洛谷P1057 传球游戏(记忆化搜索)

    点我进入题目 题目大意:n个小孩围一圈传球,每个人可以给左边的人或右边的人传球,1号小孩开始,一共传m次,请问有多少种可能的路径使球回到1号小孩. 输入输出:输入n,m,输出路径的数量. 数据范围:4 ...

  9. 【codevs3153】【BZOJ3895】取石子游戏,博弈论之记忆化搜索

    传送门1 传送门2(权限) 思路: 之前模拟赛的一道题 当时在硬刚T1的正解,而没有写暴力 考虑局面没有石子堆是1的情况 那么显然只考虑总数的奇偶就可以判断答案了 因为必胜方拼命合并石子堆,必败方即使 ...

  10. 记忆化搜索 day48

    今天听完派队的教学 感觉又可以水几道紫题了 好耶✌ 不过想起ygg提到的记忆化搜索 自己其实也是没有搞懂的 还是去做了几道题吧 P2476 [SCOI2008]着色方案 紫题喵 最开始想的是一个这样的 ...

最新文章

  1. 一步一步教你如何导出JAR包后将多个JAR包合并,并混淆
  2. fedora17用yum下载包而不安装包
  3. 在DataGrid中將RowHeader 加上文字...
  4. 5、ShardingSphere 之 公共表
  5. eslint 配置_前端代码规范配置 (一)
  6. HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试
  7. php里注册管理员账号,WordPress中创建用户角色的相关PHP函数使用详解
  8. 【2019牛客暑期多校训练营(第六场)- D】Move(随机化二分)
  9. Stats mac免费版 2.4.9(支持M1驱动器的mac,最新macOS系统)
  10. php是否支持64位,phpstudy默认不支持64位php的解决方法
  11. 不礼让行人怎么抓拍的_榆林机动车斑马线不礼让行人,您被曝光啦
  12. 坑nyoj1088 just do it
  13. 彭国伦Fortran95学习笔记(一)第八章至第十六章
  14. android编程实现128条形码的生成和识别
  15. 人工手摇机械式计算机,用袖珍式计算机处理螺旋伞齿轮调整卡
  16. 什么是加密狗?加密狗由来
  17. Context [] startup failed due to previous errors 的解决方式
  18. oracle各个版本数据库软件下载方法
  19. python3 爬虫日记(三) 爬取堆糖动态加载网页
  20. Field userClient in com.xxx.UserController required a bean of type“com.xxx“that could not be found.

热门文章

  1. Excel表格自动汇总,sheet搬迁,数据汇总,多个工作簿、多个sheet页内数据汇总
  2. 程序员真的需要一台 Mac 吗?
  3. 汇编语言:写一个简单的音乐程序
  4. PAT(甲级)1148 Werewolf - Simple Version(枚举)
  5. 直播APP软件开发,直播系统开发的技术架构揭秘
  6. mac重装系统时显示未能与服务器,mac出现您的磁盘未能分区怎么办-bootcamp磁盘未能分区解决方法 - 河东软件园...
  7. ‘pom.xml‘ has syntax errors
  8. 焦点科技股份有限公司--软件测试--《社招、校招jd、公司介绍、培训发展、薪酬福利、公益慈善》整理
  9. 王建农老师昆笛 + 简谱
  10. 关于高性能的MIMO技术的实现方法介绍