Description

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

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

Input

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

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

Output

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

Sample Input

2 2

*_

__

Sample Output

1
插头dp……蒟蒻的模板慢得要死……用0表示无插头,1表示有未拐的插头,2表示已拐的插头……
然后转移就自己YY一下就好了……
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=20110520;
const int MAXN=177147;
int i;
struct na{int x,z;na(int xx,int zz):x(xx),z(zz){}
};
int n,m,x,y,z,a[21],k,p1,p2,en,t;
bool map[101][101];
int f[2][MAXN+1],ans=0;
int v[2][MAXN+1];
queue <na> q;
inline int gx(int x,int q1,int q2){k=0;for (register int i=m+1;i;i--) k=k*3+(i==x?q1:(i==x+1?q2:a[i]));return k;}
inline void up(int r,int z,int lj){if (r==en){ans+=lj;if (ans>=INF) ans-=INF;return;}r++;k=r%2;if (v[k][z]!=r) v[k][z]=r,f[k][z]=0,q.push(na(r,z));f[k][z]+=lj;if (f[k][z]>=INF) f[k][z]-=INF;
}
char c[101];
int main(){register int i,j,p;scanf("%d%d",&n,&m);if (n<m){swap(n,m);for (j=1;j<=m;j++){scanf("%s",c);for (i=1;i<=n;i++)map[j][i]=c[i-1]=='_';}}else{for (j=1;j<=n;j++){scanf("%s",c);for (i=1;i<=m;i++)map[i][j]=c[i-1]=='_';}}en=n*m-1;while(!map[en%m+1][en/m+1]) en--;f[0][0]=v[0][0]=1;q.push(na(0,0));while(!q.empty()){na no=q.front();q.pop();int an=f[no.x%2][no.z];if(no.x%m==0) no.z*=3;x=no.x%m+1;y=no.x/m+1;for (i=1;i<=m+1;i++) a[i]=0;for (i=1,j=no.z;j;i++,j/=3) a[i]=j%3;if (!map[x][y]) up(no.x,gx(100,0,0),an);elseif (a[x]==1&&a[x+1]==1) up(no.x,gx(x,0,0),an);elseif (a[x]==0&&a[x+1]==0){if (map[x+1][y]) up(no.x,gx(x,0,1),an);if (map[x][y+1]) up(no.x,gx(x,1,0),an);if (map[x][y+1]&&map[x+1][y]) up(no.x,gx(x,2,2),an);}elseif (a[x]==0){if (map[x][y+1]) up(no.x,gx(x,a[x+1],0),an);if (map[x+1][y]&&a[x+1]==1) up(no.x,gx(x,0,2),an);if (a[x+1]==2) up(no.x,gx(x,0,0),an);}elseif (a[x+1]==0){if (map[x+1][y]) up(no.x,gx(x,0,a[x]),an);if (map[x][y+1]&&a[x]==1) up(no.x,gx(x,2,0),an);if (a[x]==2) up(no.x,gx(x,0,0),an);}}printf("%d\n",ans);
}

转载于:https://www.cnblogs.com/Enceladus/p/5143487.html

bzoj:2331: [SCOI2011]地板相关推荐

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

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

  2. bzoj 2330: [SCOI2011]糖果

    2330: [SCOI2011]糖果 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要 ...

  3. SPFA差分约束(bzoj 2330: [SCOI2011]糖果)

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 6355  Solved: 2096 [Submit][Stat ...

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

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

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

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

  6. BZOJ2331: [SCOI2011]地板

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

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

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

  8. 差分约束系统总结(转)

    转载地址 差分约束总结:  今天请教了DQS大神,算是对差分做一个系统性的总结吧,也算是对自己近期不完善理解的差分约束理一遍. 差分约束分为3大类,求最小,求最大,求是否满足约束条件,第三类求是否满足 ...

  9. 插头DP 概率DP / 期望DP

    插头DP && 概率DP / 期望DP 写在前面: 插头DP P5056 [模板]插头dp 手写哈希表的方法: 拉链法的代码如下: 开放寻址法的代码如下: 接下来是这道题的代码实现: ...

  10. 【水】【SCOI】 精简题解

    第二弹 [SCOI2009]生日快乐 搜索.递归划分问题. [SCOI2009]游戏 记忆化搜索.枚举素因子,DP. [SCOI2009]windy数 数位DP,分块统计. [SCOI2009]最长距 ...

最新文章

  1. 读书笔记之《淘宝技术这十年》
  2. SqlDataReader执行带输出参数存储过程 错误分析
  3. 如何解一元一次方程视频_七年级数学教学视频-小邵课堂
  4. 计算机期末考试操作题简单,计算机期末考试操作题及答案计算机期末考试操作题及答案.doc...
  5. python中x y 1_Python的X[y==1, 0]
  6. 双向链表(不带头结点)
  7. 深入浅出VC++串口编程--基于Win32 API
  8. mysql数据库sql注入原理_sql注入原理详解(一)
  9. NOIP2014 写后感
  10. antdesign 柱状图_ant design pro (十)advanced 图表
  11. INDY流的发送和接收
  12. qt调试失败问题跟踪
  13. Java学习之基本概念
  14. 基于KELI5 新建一个STM32 project流程
  15. C++程序注册Dll
  16. 关于 联想昭阳 E43A 无线开关设置的 正确解决办法
  17. adb locat 过滤日志-命令行
  18. PID学习笔记:模拟加热系统的PID控制
  19. IT类实习/工作习惯心得
  20. [ECharts] Component legend is used but not imported.

热门文章

  1. 嫦娥四号的通讯速率,为何没有视频直播
  2. 管理感悟:知行合一与内化
  3. http status 400 – bad request 亚马逊_蛮拼的!这个亚马逊卖家为Prime Day做了这三大准备,销量暴涨58倍...
  4. c读取txt文件内容并建立一个链表_面试官给我挖坑:rm删除文件之后,空间就被释放了吗?...
  5. sdr 软件_SDR软件定义无线电是什么?不仅仅是大频谱
  6. get函数和getline函数
  7. 三、python环境的搭建之建建建
  8. Web 加速,协议先行!
  9. 解决 Composer 运行时的 Xdebug 冲突
  10. 学习date , clock , hwclork , cal, ls ,cd , pwd, tty, whereis , which ,stat, e