Description

lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西。小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板。现在小L想知道,用L型的地板铺满整个客厅有多少种不同的方案?

需要注意的是,如下图所示,L型地板的两端长度可以任意变化,但不能长度为0。铺设完成后,客厅里面所有没有柱子的地方都必须铺上地板,但同一个地方不能被铺多次。

Input

输入的第一行包含两个整数,R和C,表示客厅的大小。

接着是R行,每行C个字符。’_’表示对应的位置是空的,必须铺地板;’*’表示对应的位置有柱子,不能铺地板。 Output

输出一行,包含一个整数,表示铺满整个客厅的方案数。由于这个数可能很大,只需输出它除以20110520的余数。

插头dp。
几个需要注意的地方:
哈希表记录被更新的状态,只用这些状态转移。
总共要保存c+1c+1个插头。
行末不能向右接插头。
记录了插头代表“已经插进来”,不能停在旁边的格子。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod=20110520,p=100007;
char s[110][110];
int fir[2][100010],ne[2][200010],val[2][200010],ans[2][200010],last[2][100010],
tot,cur,y;
int find(int x)
{int y=x%p;if (last[cur&1][y]<cur){fir[cur&1][y]=0;last[cur&1][y]=cur;}for (int i=fir[cur&1][y];i;i=ne[cur&1][i])if (val[cur&1][i]==x) return i;tot++;ne[cur&1][tot]=fir[cur&1][y];fir[cur&1][y]=tot;val[cur&1][tot]=x;ans[cur&1][tot]=0;return tot;
}
void upd(int xx)
{int z=find(xx);ans[cur&1][z]+=y;ans[cur&1][z]%=mod;
}
int main()
{int r,c,x,x0,x1;scanf("%d%d",&r,&c);for (int i=0;i<r;i++) scanf("%s",s[i]);if (r<c){for (int i=0;i<c;i++)for (int j=i+1;j<c;j++)swap(s[i][j],s[j][i]);swap(r,c);}cur=0;find(0);ans[0][1]=1;for (int i=0;i<r;i++){for (int j=0;j<c;j++){cur++;tot=0;for (int k=0;k<p;k++)if (last[cur&1^1][k]==cur-1)for (int l=fir[cur&1^1][k];l;l=ne[cur&1^1][l]){x=val[cur&1^1][l];y=ans[cur&1^1][l];x0=x&3;x1=(x>>2*c)&3;if (s[i][j]=='*'){if (!(x0&3)&&!(x1&3)) upd(x>>2);continue;}if (x0&2){if (x1&2) upd((x>>2)^(2<<2*(c-1)));if (!(x1&3)){upd((x>>2)|(2<<2*(c-1)));if (j<c-1) upd((x>>2)|(1<<2*c));}}if (x0&1){if (!(x1&3)){upd(x>>2);upd((x>>2)|(1<<2*(c-1)));}}if (!(x0&3)){if (!(x1&3)){if (j<c-1) upd((x>>2)|(2<<2*c));if (j<c-1) upd((x>>2)|(1<<2*c)|(1<<2*(c-1)));upd((x>>2)|(2<<2*(c-1)));}if (x1&1){upd((x>>2)^(1<<2*(c-1)));if (j<c-1) upd((x>>2)^(1<<2*(c-1))|(1<<2*c));}if (x1&2){if (j<c-1) upd(((x>>2)^(2<<2*(c-1)))|(2<<2*c));upd((x>>2)^(3<<2*(c-1)));}}}}}printf("%d\n",ans[cur&1][find(0)]);
}

【SCOI2011】bzoj2331 地板相关推荐

  1. [BZOJ2331]地板(插头DP)

    Description lxhgww的小名叫"小L",这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板 ...

  2. BZOJ2331: 地板 题解

    这样的棋盘地图容易让人想到插头dp 我们可以设计两种插头:还没拐过弯的插头((#1)和拐过弯的插头(#2),这样每个插头就可以用一个三进制数存储,为了压位方便我们用4进制 考虑轮廓线dp时候的转移,设 ...

  3. BZOJ2331:[SCOI2011]地板——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2331 题面复制于洛谷 题目描述 lxhgww的小名叫"小L",这是因为他总是很喜 ...

  4. [bzoj2331][SCOI2011]地板【插头dp】

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2331 [题解] 可以用插头dp的方式表示状态. 每一位用一个三进制位表示,0表示没有 ...

  5. BZOJ2331: [SCOI2011]地板

    昨晚想了好久还是不是会压睡了一觉yy了一下突然会了 我也不知道这个叫不叫插头dp,毕竟没写过- 不过跑的很快快(自我满足一下qwq) 首先因为nm<=100,min(n,m)<=10,n& ...

  6. P3272 [SCOI2011]地板(插头DP)

    [题面链接] https://www.luogu.org/problemnew/show/P3272 [题目描述] 有一个矩阵,有些点必须放,有些点不能放,用一些L型的图形放满,求方案数 [题解] ( ...

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

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

  8. java实现人字拼,地板怎么玩花式人字拼铺法 人字拼地板家居实例图

    地板怎么玩花式人字拼铺法 人字拼地板家居实例图 然鹅,近期热起来的人字拼地板并不是近几年才出现的.这种高端大气上档次的铺法,深受中世纪欧洲贵族喜爱,许多著名的欧洲宫殿.老上海歌厅舞池.书舍雅室中也很常 ...

  9. 每天拖地好麻烦?用这几招,地板每天光亮如新!

    多人在家装时都会选择实木地板,可是,地板的清洁和保养也随之成为我们非常头疼的问题.怎么样才能快速有效地清洁保养地板呢? 1精盐去渍,省时又省力 如果木地板上不小心粘上一点蛋迹,可在撒上一些精盐,只要1 ...

最新文章

  1. 2017年全球光伏需求有望首次突破100吉瓦
  2. 【译】Federated Learning: Bringing Machine Learning to the edge with Kotlin and Android
  3. 在XX公司工作第二天,维护已有代码
  4. ForkJoinPool 偷任务
  5. AC日记——红色的幻想乡 洛谷 P3801
  6. [翻译]WPF控件库 MaterialDesignInXamlToolkit (2) Brush Names
  7. Android context.getSystemService的简单说明
  8. 基于珞珈一号夜间灯光数据的GDP空间化
  9. 电工技师技能实训考核装置QY-W601C
  10. Android 获取时间戳
  11. 计算机建筑装饰设计入门,07建筑装饰《计算机装饰设计软件实训专用周.doc
  12. IPtables 扩展模块 Multiport/IPRange
  13. RPM REBUILD
  14. 封装的PKPM BimView的方法
  15. Adobe2023全家桶win及Mac系统安装包下载及安装教程ps、pr、ai、ae安装包下载
  16. K-Net 论文笔记
  17. JDK 11 首超 JDK 8,真牛逼了!
  18. Sequence II(HDU - 5919)
  19. 自学编程5个月找到了月薪12K的工作,我的方法值得大家借鉴
  20. python pandas 去重_Pandas 数据框增、删、改、查、去重、抽样基本操作方法

热门文章

  1. 自然语言处理笔记6-哈工大 关毅
  2. 【线性代数】第一章 1.1矩阵及其运算
  3. centos7parted分区_CentOS7 运维 - 磁盘管理与文件系统 | 超详细 | 附挂载教程及错误排查 | parted超大磁盘分区教程...
  4. AU实现剪辑音乐的时长自由
  5. 带火中台的阿里,正携城市大脑席卷全国
  6. 以太网速率怎么手动设置_怎样设置网卡的速率
  7. 多元统计分析-主成分分析的原理与实现
  8. python奇数位_Python实践|输出0-7组成八位奇数总数
  9. 计算机基础知识(二)-word 2016
  10. 通过E灵插件让Excel的批注变得更漂亮