【BZOJ1814】Ural 1519 Formula 1

题意:一个 m * n 的棋盘,有的格子存在障碍,求经过所有非障碍格子的哈密顿回路个数。(n,m<=12)

题解:插头DP板子题,刷板子,附带题解链接。

如何存放状态呢?可以采用hash,我们的hash表形如一个队列,每次新加入一个状态时,就沿着这个状态在队列中对应的hash值不断向后找,直到找到这个状态或者发现一个空位为止。

本题我的状态采用了4进制表示。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const int limit=99991;
int n,m,k,tot[2],nn,mm;
bool v[20][20];
char str[20];
ll tag,ans;
int hs[limit],state[2][limit];
ll dp[2][limit];
inline void upd(ll S)
{register int pos=S%limit;while(hs[pos]){if(state[k][hs[pos]]==S){dp[k][hs[pos]]+=tag;return ;}pos++;if(pos==limit)    pos=0;}hs[pos]=++tot[k],state[k][tot[k]]=S,dp[k][tot[k]]=tag;
}
int main()
{register int i,j,t,u,tmp,p,q,x,y,S,T;scanf("%d%d",&n,&m);for(i=1;i<=n;i++){scanf("%s",str+1);for(j=1;j<=m;j++)asdasd{v[i][j]=str[j]=='.';if(v[i][j])   nn=i,mm=j;}}tot[0]=1,state[0][1]=0,dp[0][1]=1;for(i=1;i<=n;i++){for(j=1;j<=m;j++){k^=1;memset(hs,0,sizeof(hs));memset(state[k],0,sizeof(state[k][0])*(tot[k]+1));memset(dp[k],0,sizeof(dp[k][0])*(tot[k]+1));tot[k]=0;for(t=1;t<=tot[k^1];t++){S=state[k^1][t],tag=dp[k^1][t],y=j<<1,x=y-2,p=(S>>x)&3,q=(S>>y)&3,T=S^(p<<x)^(q<<y);if(!v[i][j]){if(!p&&!q)   upd(T);continue;}if(p==0&&q==0&&v[i][j+1]&&v[i+1][j]){upd(T|(1<<x)|(2<<y));continue;}if((p==0&&q==1)||(p==1&&q==0)){if(v[i+1][j])    upd(T|(1<<x));if(v[i][j+1])  upd(T|(1<<y));continue;}if((p==0&&q==2)||(p==2&&q==0)){if(v[i+1][j]) upd(T|(2<<x));if(v[i][j+1])  upd(T|(2<<y));continue;}if(p==2&&q==1){upd(T);continue;}if(p==1&&q==2&&i==nn&&j==mm){ans+=tag;continue;}if(p==1&&q==1){for(tmp=0,u=y+2;u<=m+m&&tmp>=0;tmp+=((T>>u)&1)-((T>>(u+1))&1),u+=2);u-=2,upd(T^(3<<u));continue;}if(p==2&&q==2){for(tmp=0,u=x-2;u>=0&&tmp>=0;tmp+=((T>>(u+1))&1)-((T>>u)&1),u-=2);u+=2,upd(T^(3<<u));continue;}}}for(t=1;t<=tot[k];t++) state[k][t]<<=2;}printf("%lld",ans);return 0;
}

转载于:https://www.cnblogs.com/CQzhangyu/p/8010738.html

【BZOJ1814】Ural 1519 Formula 1 插头DP相关推荐

  1. bzoj1814 Ural 1519 Formula 1(插头dp模板题)

    1814: Ural 1519 Formula 1 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 924  Solved: 351 [Submit][S ...

  2. Ural 1519. Formula 1 优美的插头DP

    今天早上学了插头DP的思想和最基础的应用,中午就开始敲了,岐哥说第一次写不要看别人代码,利用自己的理解一点点得写出来,这样才锻炼代码能力!于是下午慢慢地构思轮廓,一点点地敲出主体代码,其实是很磨蹭的, ...

  3. URAL1519 Formula 1 —— 插头DP

    题目链接:https://vjudge.net/problem/URAL-1519 1519. Formula 1 Time limit: 1.0 second Memory limit: 64 MB ...

  4. BZOJ 1814 Ural 1519 Formula 1

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1814 题解 插头dp,枚举边界线的插头,分类讨论转移点上插头和左插头的情况,来转移这个点 ...

  5. bzoj 1814: Ural 1519 Formula 1【插头dp】

    设f[i][j][s]为轮廓线推到格子(i,j),状态为s的方案数 括号表示一段线的左端和右端,表示成左括号和右括号,状压的时候用1和2表示,0表示已经闭合 下面的蓝线是黄色格子的轮廓线,dp转移要把 ...

  6. POJ-1739 Tony's Tour 插头DP(单条路径)

    题目链接:http://poj.org/problem?id=1739 完全可以用Ural 1519 Formula 1 插头DP(单回路)的代码解决此题,只要把图修改一下: .... ....... ...

  7. 插头DP题目泛做(为了对应WYD的课件)

    题目1:BZOJ 1814 URAL 1519 Formula 1 题目大意:给定一个N*M的棋盘,上面有障碍格子.求一个经过所有非障碍格子形成的回路的数量. 插头DP入门题.记录连通分量. 1 #i ...

  8. [入门向选讲] 插头DP:从零概念到入门 (例题:HDU1693 COGS1283 BZOJ2310 BZOJ2331)

    转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7326874.html 最近搞了一下插头DP的基础知识--这真的是一种很锻炼人的题型-- 每一道题的状态都不一样 ...

  9. HDU4084 插头dp

    题意:给定一个图,0是不能放的,然后现在有1X1和1X2方块,最后铺满该图,使得1X1使用次数在C到D之间,1X2次数随便,问有几种放法 思路:插头DP或轮廓线,多加一维DP讨论就可以 注意插头DP状 ...

最新文章

  1. 解码大脑:改善BCI稳定性
  2. 苹果接盘倒下的无人车公司:吴恩达旗下,曾估值2亿美元,CEO及大部分员工被裁...
  3. 跨域加了header也解决不了?
  4. layui导入模板数据_layui表格-template模板的三种用法
  5. 后副车架焊接机器人_车架全自动焊接机器人的日常维护保养方法
  6. jdk 1.8 jdk8_JDK 8功能的可疑方面
  7. 0. 跟踪标记 (Trace Flag) 简介
  8. sessionStrorage + localStorage+ cookes
  9. 函数式编程的兴衰(Composing Software 1)
  10. Open Sans字体
  11. 算法——排序——归并排序图解动画
  12. RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (三、无线温湿度传感器 之 I2C通讯)
  13. mysql select 临时表_mysql临时表的产生
  14. C++练习 计算年份所属生肖
  15. ESP32编程使用OLED屏
  16. nsga 的java实现_Java – Scala遗传算法(GA)库中的模拟二进制交叉(SBX)交叉运算符
  17. 如何做一个基于python校园运动场地预约系统毕业设计毕设作品(Django框架)
  18. 研发效能度量的正确姿势与落地实践(演讲PPT分享版)
  19. 模拟登录淘宝--Python
  20. c语言将结果原模原样输出到文件,用c语言处理文件

热门文章

  1. python读取tiff数据_opencv-python读取tiff影像,并展示
  2. 数独游戏技巧从入门到精通_如何引导孩子入门九宫格数独?掌握4个技巧口诀,孩子思维提升快...
  3. python tkinter 安装_如何为Python安装tkinter?
  4. mac tomcat java_Mac下配置Java开发环境(JDK1.8)和Tomcat服务器
  5. 智能雷达物位计说明书_?浅谈人工检尺法和雷达液位计在油罐液位测量中的应用...
  6. exe打包工具哪个最好_为你的 Python 程序写个启动工具箱
  7. C/C++深入剖析指针机制与内存动态管理
  8. 【lua学习】3.字符串
  9. gridview ashx实现数据更新_Python分析了香港26281套在售二手房数据,结果发现
  10. java jtextarea 滚动条_java 在JTextArea中显示 滚动条