http://acm.hdu.edu.cn/showproblem.php?pid=2209

不知为啥有种直觉。会出状压+搜索的题,刷几道先

简单的BFS。状压表示牌的状态,

  1. //#pragma comment(linker, "/STACK:102400000,102400000")
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <string>
  6. #include <iostream>
  7. #include <iomanip>
  8. #include <cmath>
  9. #include <map>
  10. #include <set>
  11. #include <queue>
  12. using namespace std;
  13.  
  14. #define ls(rt) rt*2
  15. #define rs(rt) rt*2+1
  16. #define ll long long
  17. #define ull unsigned long long
  18. #define rep(i,s,e) for(int i=s;i<e;i++)
  19. #define repe(i,s,e) for(int i=s;i<=e;i++)
  20. #define CL(a,b) memset(a,b,sizeof(a))
  21. #define IN(s) freopen(s,"r",stdin)
  22. #define OUT(s) freopen(s,"w",stdout)
  23. const ll ll_INF = ((ull)(-1))>>1;
  24. const double EPS = 1e-8;
  25. const double pi = acos(-1.0);
  26. const int INF = 100000000;
  27.  
  28. int len,s;
  29. int vis[1<<21];
  30. char in[50];
  31. int legal[25];
  32. struct Node{
  33. int s;
  34. int cnt;
  35. Node(int ss,int cc):s(ss),cnt(cc){}
  36. };
  37.  
  38. void change()
  39. {
  40. s=0;
  41. len=strlen(in);
  42. for(int i=0;i<len;i++)
  43. {
  44. s<<=1;
  45. if(in[i] == '1')s+=1;
  46. }
  47. }
  48.  
  49. int bfs()
  50. {
  51. queue<Node>q;
  52. q.push(Node(s,0));
  53. CL(vis,0);
  54. vis[s]=1;
  55. while(!q.empty())
  56. {
  57. Node tp=q.front();q.pop();///
  58. if(tp.s==0)return tp.cnt;
  59. int s,cnt=tp.cnt+1;
  60. for(int i=0;i<len;i++)
  61. {
  62. if(i==0)s=tp.s^3;
  63. else
  64. {
  65. if(i==len-1)s=tp.s^(3<<(len-2));//
  66. else s=(tp.s^(7<<(i-1)));
  67. }
  68. if(!vis[s])
  69. {
  70. vis[s]=1;
  71. q.push(Node(s,cnt));
  72. }
  73.  
  74. }
  75.  
  76. }
  77. return -1;
  78. }
  79.  
  80. int main()
  81. {
  82. //IN("hdu2209.txt");
  83. while(~scanf("%s",in))
  84. {
  85. change();
  86. int ans=bfs();
  87. if(ans==-1)puts("NO");
  88. else printf("%d\n",bfs());
  89. }
  90. return 0;
  91. }

hdu 2209 bfs+状压的更多相关文章

  1. hdu 5025 bfs+状压

    http://acm.hdu.edu.cn/showproblem.php?pid=5025 N*N矩阵 M个钥匙 K起点,T终点,S点需多花费1点且只需要一次,1-9表示9把钥匙,只有当前有I号钥匙 ...

  2. hdu 1429 bfs+状压

    题意:这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在地牢另外的某些地方.刚开始 Ignatius被关在(sx,sy)的位置,离开地牢的门 ...

  3. HDU 4771 BFS + 状压

    Stealing Harry Potter's Precious Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  4. C - 小明系列故事――捉迷藏 HDU - 4528 bfs +状压 旅游-- 最短路+状压

    C - 小明系列故事――捉迷藏 HDU - 4528 这个题目看了一下题解,感觉没有很难,应该是可以自己敲出来的,感觉自己好蠢... 这个是一个bfs 用bfs就很好写了,首先可以预处理出大明和二明能 ...

  5. hdu 1044(bfs+状压)

    非常经典的一类题型 没有多个出口.这里题目没有说清楚 Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  6. hdu 5094 Maze (BFS+状压)

    题意: n*m的迷宫.多多要从(1,1)到达(n,m).每移动一步消耗1秒.有P种钥匙. 有K个门或墙.给出K个信息:x1,y1,x2,y2,gi    含义是(x1,y1)与(x2,y2)之间有gi ...

  7. hdu 4771 Stealing Harry Potter's Precious (BFS+状压)

    题意: n*m的迷宫,有一些格能走("."),有一些格不能走("#").起始点为"@". 有K个物体.(K<=4),每个物体都是放在& ...

  8. 孤岛营救问题 (BFS+状压)

    https://loj.ac/problem/6121 BFS + 状压 写过就好想,注意细节debug #include <bits/stdc++.h> #define read rea ...

  9. HDU 5025:Saving Tang Monk(BFS + 状压)

    http://acm.hdu.edu.cn/showproblem.php?pid=5025 Saving Tang Monk Problem Description   <Journey to ...

随机推荐

  1. Spring框架学习之注解配置与AOP思想

         上篇我们介绍了Spring中有关高级依赖关系配置的内容,也可以调用任意方法的返回值作为属性注入的值,它解决了Spring配置文件的动态性不足的缺点.而本篇,我们将介绍Spring的又一大核心 ...

  2. C# 取Visio模型信息的简易方法

    最近的一个项目,要求导出Visio图纸,因为是建筑类的,所以,需要设置墙壁,门,房间等信息的参数. 拿墙壁为例,选中墙壁模型,右键属性,会弹出以下对话框. 需要设置墙长.墙壁厚度等一些列信息. 现在C ...

  3. 微信小程序异步处理

    直接看问题: 然后看打印的结果: 根据上面两图可以看出,代码上先执行的网络请求,再执行打印的变量,但是从下面打印的结果来看,先出结果的是执行打印变量的函数(aafn函数),再打印出网络请求succes ...

  4. python jason,pickle

    参考官网 https://docs.python.org/3/library/json.html https://docs.python.org/3/library/pickle.html 了解这两个 ...

  5. #UnityTips# 2017.11.14

    hi,all.最近比较忙,所以更新也比较慢了. 今天就来和大家分享一个小Tip,它是关于UGUI的坑的. 使用过UGUI的朋友们都知道,Canvas的渲染方式有三种: Screen Space Ove ...

  6. Python 3.X 调用多线程C模块,并在C模块中回调python函数的示例

    由于最近在做一个C++面向Python的API封装项目,因此需要用到C扩展Python的相关知识.在此进行简要的总结. 此篇示例分为三部分.第一部分展示了如何用C在Windows中进行多线程编程:第二 ...

  7. 谈谈我的移动端rem适配方案

    最近有点怀疑人生,毕竟一个人写前端,有时候会怀疑自己理解的一些东西包括用法有没有符合标准.趁着这阵子闲下来,翻了翻别人的rem适配博客,发现有点绕口,怪自己是个强迫症,啥都要自己去试试结果并从中理解, ...

  8. 阿里云CentOS搭建系统

    1.在阿里云网站上购买申请服务器. 2.通过Xshell连接服务器,并用root账户登入. 3.配置java开发环境:(也可以使用阿里云一键部署,自动配置并部署服务器) 一.安装jdk 1.查看Lin ...

  9. nodejs a和b文件相互引用

    //取自于node中文网 http://nodejs.cn/api/modules.html 当循环调用 require() 时,一个模块可能在未完成执行时被返回. 例如以下情况: a.js: con ...

  10. [转载] Jupiter代码审查工具使用参考

    转载自http://blog.csdn.net/jemlee2002/article/details/5715355 一.       Jupiter 是什么? 这里的 Jupiter 是一个开源的代 ...