考试的时候一看是河南省选题,觉得会很难,有点不敢想正解。感觉是个状压。但是一看是十年前的题,那怂什么!

直接把十六个数的状态压进去,因为个数是不变的,所以状态枚举的时候只要找数目一样的转移即可。而且只需找这一位为1的转移即可。因为个数不变,所以转移0到1和转移1到0是一样的。

就是简单的模拟转移,找它的上下左右对应的那一位是否为0,如果是,那么就是从此为是0,那一位是1转移过来的,取个min即可。

因为枚举是暴力枚举,而不是按状态顺序枚举,所以可能在一次枚举的时候有的状态没有转移到,那就重复处理此过程,直到都转移到即可。

比较暴力。能过就行。hhh。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. #define pos(i,a,b) for(int i=(a);i<=(b);i++)
  6. #define pos2(i,a,b) for(int i=(a);i>=(b);i--)
  7. int f[1<<16];
  8. int count(int x)
  9. {
  10. int sum=0;
  11. while(x)
  12. {
  13. if(x&1)
  14. sum++;
  15. x>>=1;
  16. }
  17. return sum;
  18. }
  19. int tmp,cnt,ans;
  20. int flag[20];
  21. int main()
  22. {
  23. freopen("movea.in","r",stdin);
  24. freopen("movea.out","w",stdout);
  25. memset(f,0x7f,sizeof(f));
  26. //cout<<(7^2)<<endl;
  27. pos(i,1,16)
  28. {
  29. char x;
  30. cin>>x;
  31. int xx=x-'0';
  32. if(xx==1)
  33. {
  34. tmp|=(1<<((17-i)-1));
  35. flag[i]=1;
  36. }
  37. }
  38. pos(i,1,16)
  39. {
  40. char x;
  41. cin>>x;
  42. int xx=x-'0';
  43. if(xx==1)
  44. ans|=(1<<((17-i)-1));
  45. }
  46. cnt=count(tmp);
  47. f[tmp]=0;
  48. while(f[ans]>10000000)
  49. {
  50. pos(i,0,(1<<16)-1)
  51. {
  52. if(count(i)==cnt)
  53. {
  54. pos(j,1,16)
  55. {
  56. int qian=(1<<((17-j)-1));
  57. if(qian&i)
  58. {
  59. if(((j%4)!=1)&&((1<<((18-j)-1))&i)==0)
  60. {
  61. int temp;
  62. temp=(1<<((18-j)-1))|i;
  63. temp^=qian;
  64. f[i]=min(f[i],f[temp]+1);
  65. }
  66. if((j%4)&&((1<<((16-j)-1))&i)==0)
  67. {
  68. int temp;
  69. temp=(1<<((16-j)-1))|i;
  70. temp^=qian;
  71. f[i]=min(f[i],f[temp]+1);
  72. }
  73.  
  74. if(j<=12&&((1<<((13-j)-1))&i)==0)
  75. {
  76. int temp;
  77. temp=(1<<((13-j)-1))|i;
  78. temp^=qian;
  79. f[i]=min(f[i],f[temp]+1);
  80. }
  81. if(j>=5&&(((1<<(21-j)-1))&i)==0)
  82. {
  83. int temp;
  84. temp=(1<<((21-j)-1))|i;
  85. temp^=qian;
  86. f[i]=min(f[i],f[temp]+1);
  87. }
  88. }
  89. }
  90. }
  91. }
  92. }
  93. cout<<f[ans];
  94. //while(1);
  95. return 0;
  96. }

  

[BZOJ 1054][HAOI 2008]移动玩具 状态压缩的更多相关文章

  1. 【BZOJ 1054】 [HAOI2008]移动玩具

    Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动 ...

  2. bzoj 1087 [SCOI2005]互不侵犯King 状态压缩dp

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Descripti ...

  3. BZOJ 1097: [POI2007]旅游景点atr 状态压缩+Dijkstra

    题解: $k<=20,$ 考虑状压dp. 从 $1$ 号点走到 $n$ 号点经过的点的个数可能会非常多,但是强制要求经过的点一共才 $20$ 个. 而我们发现这个题好就好在可以经过某个城市,而不 ...

  4. [HAOI 2005][BZOJ 1054] 移动玩具

    先贴一波题面 1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2288  Solved: 1270 Descr ...

  5. bzoj 1054: [HAOI2008]移动玩具 bfs

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description 在 ...

  6. bzoj 1054 移动玩具

    题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=1054 移动玩具 Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想 ...

  7. BZOJ 1054 [HAOI2008]移动玩具

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1388  Solved: 764[Submit][Statu ...

  8. [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)

    [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...

  9. BZOJ 1087状态压缩DP

    状态压缩DP真心不会写,参考了别人的写法. 先预处理出合理状态, 我们用二进制表示可以放棋子的状态,DP[I][J][K]:表示现在处理到第I行,J:表示第I行的状态,K表示现在为止一共放的棋子数量. ...

随机推荐

  1. ASP.NET Core 源码学习之 Options[4]:IOptionsMonitor

    前面我们讲到 IOptions 和 IOptionsSnapshot,他们两个最大的区别便是前者注册的是单例模式,后者注册的是 Scope 模式.而 IOptionsMonitor 则要求配置源必须是 ...

  2. word2-寻找社交新浪微博中的目标用户

    项目简述: 为了进行更加精准的营销, 利用数据挖掘相关算法, 利用开放API或自行编写爬虫获得新浪微博, 知乎等社交网络(可能需要破解验证码)中用户所发布的数据, 利用数据挖掘的相关算法进行分析, 从 ...

  3. HTML DOM元素关系与操作

    <html> <head><title>DOM元素关系与操作</title></head> <body> <!-- div ...

  4. ASP.NET Core Web API 最小化项目

    ASP.NET Core中默认的ASP.NET Core 模板中有Web API 模板可以创建Web API项目. 有时,只需要创建一个API,不需要关心Razor,本地化或XML序列化.通过删除无用 ...

  5. 三、SolrCloud的搭建

    本次安装是单台虚拟机安装,所以采用伪集群的方式进行安装,如果是真正的生产环境,将伪集群的ip改下就可以了,步骤是一样的. SolrCloud结构图如下: 环境准备: CentOS-6.4-i386-b ...

  6. h5 新增特性用法---持续更新

    1.dataset <div class="box" data-title1="自定义属性" data-age="18" data-m ...

  7. 针对双系统ubuntu16.04卡死及系统没有声音解决方法

    楼主电脑系统状况:win10主系统,128固态为ubuntu系统       安装一共为两次. 第一次出现ubuntu安装成功后没有声音,主系统win10有声音,Ubuntu上检测不到声卡,说明ubu ...

  8. JavaWeb 后端 <一> 之 Tomcat服务器 - Http协议 学习笔记

    1.Web开发概述 1.1服务器上的资源分类: a.静态资源:指web页面中供人们浏览的数据始终是不变.html css js 图片 多媒体 b.动态资源:指web页面中供人们浏览的数据是由程序产生的 ...

  9. DotNetCore跨平台~Dockerfile的解释

    回到目录 大叔感觉网上对Dockerfile的说明不是很清楚,或者说怎么去用说的不清楚,在vs2017里我们可以去建立自己的Dockerfile文件,然后你的项目可以被生成一个镜像,把它推到仓库之后, ...

  10. Mybaits简诉

    先组织一下语言!Mybatis是一个框架,一个数据持久化的框架,作用就是SQL语句的映射!减少了JDBC繁琐的数据操作与类型转换!简而言之,就是方便.轻巧!什么是持久化,持久,恩,JDBC就是一个数据 ...