题目链接

https://www.lydsy.com/JudgeOnline/problem.php?id=1814

题解

插头dp,枚举边界线的插头,分类讨论转移点上插头和左插头的情况,来转移这个点的插头。

代码

#include <cstdio>
#include <cstring>
#include <algorithm>const int maxn=20;
const int hash_mod=1007;
const int maxd=maxn*maxn;
const int maxk=50000;int read()
{int x=0,f=1;char ch=getchar();while((ch<'0')||(ch>'9')){if(ch=='-'){f=-f;}ch=getchar();}while((ch>='0')&&(ch<='9')){x=x*10+ch-'0';ch=getchar();}return x*f;
}struct func
{int x;long long y;
};struct hash_table
{int now[hash_mod+10],pre[maxk+2],cnt;func val[maxk+2];int clear(){cnt=0;memset(now,0,sizeof now);return 0;}long long add(int s,long long v){int trans=s%hash_mod,j=now[trans];while(j){if(val[j].x==s){val[j].y+=v;return val[j].y;}j=pre[j];}val[++cnt].x=s;val[cnt].y=v;pre[cnt]=now[trans];now[trans]=cnt;return v;}func get(int x){return val[x];}
};hash_table ht[2];
int n,m,rv[maxn+4],v[maxn+2][maxd+2],now,last;
char s[maxn+4];int decode(int x)
{for(int i=0; i<=m; ++i){rv[i]=x&3;x>>=2;}return 0;
}int encode()
{int res=0;for(int i=m; ~i; --i){res=(res<<2)+rv[i];}return res;
}int findl(int pos)
{int now=-1;while(1){if(rv[pos]){now+=(rv[pos]==1)?1:-1;}if(!now){return pos;}--pos;}
}int findr(int pos)
{int now=1;while(1){if(rv[pos]){now+=(rv[pos]==1)?1:-1;}if(!now){return pos;}++pos;}
}int expand(int x,int y,func from)
{decode(from.x);int west=rv[m],north=rv[y];if((!y)&&west){return 0;}if(v[x][y]){if(west||north){return 0;}ht[now].add(encode(),from.y);}else if(west&&north){rv[m]=rv[y]=0;if(west<north){int flag=0;for(int i=0; i<=m; ++i){if(rv[i]){flag=1;break;}}if(!((!flag)&&(x==n))){return 0;}}if(west==north){if(west==1){rv[findr(y+1)]=1;}else{rv[findl(y-1)]=2;}}ht[now].add(encode(),from.y);}else if((!west)&&(!north)){rv[y]=1;rv[m]=2;ht[now].add(encode(),from.y);}else if((!west)&&north){ht[now].add(encode(),from.y);rv[m]=north;rv[y]=0;ht[now].add(encode(),from.y);}else if(west&&(!north)){ht[now].add(encode(),from.y);rv[y]=west;rv[m]=0;ht[now].add(encode(),from.y);}return 0;
}int work()
{now=0;last=1;ht[0].clear();ht[0].add(0,1);for(int i=1; i<=n; ++i){for(int j=0; j<m; ++j){std::swap(now,last);ht[now].clear();for(int k=1; k<=ht[last].cnt; ++k){expand(i,j,ht[last].get(k));}}}return 0;
}int main()
{n=read();m=read();for(int i=1; i<=n; ++i){scanf("%s",s);for(int j=0; j<m; ++j){if(s[j]=='*'){v[i][j]=1;}}}work();printf("%lld\n",ht[now].add(0,0));return 0;
}

BZOJ 1814 Ural 1519 Formula 1相关推荐

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

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

  2. 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 ...

  3. 【BZOJ1814】Ural 1519 Formula 1 插头DP

    [BZOJ1814]Ural 1519 Formula 1 题意:一个 m * n 的棋盘,有的格子存在障碍,求经过所有非障碍格子的哈密顿回路个数.(n,m<=12) 题解:插头DP板子题,刷板 ...

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

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

  5. bzoj 4451 : [Cerc2015]Frightful Formula FFT

    4451: [Cerc2015]Frightful Formula Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 177  Solved: 57 [S ...

  6. [COGS 1512][URAL 1519]一级方程式赛车

    按格插头DP #include <iostream> #include <cstdio> #include <cstring> #include <algor ...

  7. BZOJ 4451: [Cerc2015]Frightful Formula

    Description 给你一个n*n矩阵的第一行和第一列,其余的数通过如下公式推出:  \(f_{i,j}=a\times f_{i,j-1}+b\times f_{i-1,j}+c\) 求\(f_ ...

  8. bzoj 4451: [Cerc2015]Frightful Formula 数学+排列组合

    题意 给你一个n*n矩阵的第一行和第一列,其余的数通过如下公式推出: F[i,j]=a*f[i,j-1]+b*f[i-1,j]+c 求f[n][n]%(10^6+3) 2<=n<=2000 ...

  9. [FFT || 递推] BZOJ 4451 [Cerc2015]Frightful Formula

    f1,i f_{1,i} 的贡献是 f1,i∗an−i∗bn−1∗Cn−i2n−i−2 f_{1,i}*a^{n-i}*b^{n-1}*C_{2n-i-2}^{n-i} fi,1 f_{i,1} 同理 ...

最新文章

  1. thinkphp mysql 密码加密_thinkphp框架实现mysql读写分离
  2. html边框绕着图片,CSS 边框
  3. AI人才「用工荒」如何解决?看看这几家顶级公司的应对策略
  4. Centos 7下mysql的安装与配置
  5. Spring-方法注入lookup、方法替换MethodReplacer接口
  6. SpringBoot+Jquery+Jstree实现企业架构管理
  7. .net core 中使用httpclient,HttpClientFactory的问题
  8. 图解 React-router 源码
  9. erp系统方案书_门禁系统方案书
  10. 项目经理让我陪着技术加班
  11. gulp 批量添加类名 在一个任务中使用多个文件来源
  12. 关于多级导航如何实现 详细解释。
  13. 简书bug(已修复):网络不佳时安卓1.11.3呈现的空白页面如图
  14. 【语音分析】基于matlab倒谱分析与MFCC系数计算【含Matlab源码 556期】
  15. 小区同步、LTE的时间结构(FDD/TDD)
  16. android 自由落体,Android动画之属性动画1 自由落体
  17. 参加口碑最好的广州传智播客Java就业培训班吧
  18. 《论离离原上谱这个梗》
  19. java数组不初始化长度_数组之初始化 Java
  20. 数据库建模工具Aquarius Orm Studio发布正式版本

热门文章

  1. 富斯遥控器/接收机的PWM/PPM/iBUS/SBUS通道设置
  2. 写给兄弟连学员的第三封信 ——学习这点事 李 明
  3. 06-一些键鼠和页面操作
  4. winXP SP2体验
  5. mySql获取表的字段名,字段注释
  6. 图像检索:CIE Lab三维直方图+卡方距离
  7. Dynamics CRM 导入解决方案时如何做到不覆盖目标系统的站点地图
  8. Android 替换系统桌面Launcher
  9. 沉浸式宣传片制作流程
  10. 焦点对话AMA:Cirus如何重新定义所有权经济 用数据释放时代价值