bzoj:2331: [SCOI2011]地板
Description
lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西。小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板。现在小L想知道,用L型的地板铺满整个客厅有多少种不同的方案?
需要注意的是,如下图所示,L型地板的两端长度可以任意变化,但不能长度为0。铺设完成后,客厅里面所有没有柱子的地方都必须铺上地板,但同一个地方不能被铺多次。
Input
输入的第一行包含两个整数,R和C,表示客厅的大小。
接着是R行,每行C个字符。’_’表示对应的位置是空的,必须铺地板;’*’表示对应的位置有柱子,不能铺地板。
Output
输出一行,包含一个整数,表示铺满整个客厅的方案数。由于这个数可能很大,只需输出它除以20110520的余数。
Sample Input
*_
__
Sample Output
![](/assets/blank.gif)
#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]地板相关推荐
- BZOJ2331:[SCOI2011]地板——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2331 题面复制于洛谷 题目描述 lxhgww的小名叫"小L",这是因为他总是很喜 ...
- bzoj 2330: [SCOI2011]糖果
2330: [SCOI2011]糖果 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要 ...
- SPFA差分约束(bzoj 2330: [SCOI2011]糖果)
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 6355 Solved: 2096 [Submit][Stat ...
- [bzoj2331][SCOI2011]地板【插头dp】
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2331 [题解] 可以用插头dp的方式表示状态. 每一位用一个三进制位表示,0表示没有 ...
- P3272 [SCOI2011]地板(插头DP)
[题面链接] https://www.luogu.org/problemnew/show/P3272 [题目描述] 有一个矩阵,有些点必须放,有些点不能放,用一些L型的图形放满,求方案数 [题解] ( ...
- BZOJ2331: [SCOI2011]地板
昨晚想了好久还是不是会压睡了一觉yy了一下突然会了 我也不知道这个叫不叫插头dp,毕竟没写过- 不过跑的很快快(自我满足一下qwq) 首先因为nm<=100,min(n,m)<=10,n& ...
- [入门向选讲] 插头DP:从零概念到入门 (例题:HDU1693 COGS1283 BZOJ2310 BZOJ2331)
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7326874.html 最近搞了一下插头DP的基础知识--这真的是一种很锻炼人的题型-- 每一道题的状态都不一样 ...
- 差分约束系统总结(转)
转载地址 差分约束总结: 今天请教了DQS大神,算是对差分做一个系统性的总结吧,也算是对自己近期不完善理解的差分约束理一遍. 差分约束分为3大类,求最小,求最大,求是否满足约束条件,第三类求是否满足 ...
- 插头DP 概率DP / 期望DP
插头DP && 概率DP / 期望DP 写在前面: 插头DP P5056 [模板]插头dp 手写哈希表的方法: 拉链法的代码如下: 开放寻址法的代码如下: 接下来是这道题的代码实现: ...
- 【水】【SCOI】 精简题解
第二弹 [SCOI2009]生日快乐 搜索.递归划分问题. [SCOI2009]游戏 记忆化搜索.枚举素因子,DP. [SCOI2009]windy数 数位DP,分块统计. [SCOI2009]最长距 ...
最新文章
- 读书笔记之《淘宝技术这十年》
- SqlDataReader执行带输出参数存储过程 错误分析
- 如何解一元一次方程视频_七年级数学教学视频-小邵课堂
- 计算机期末考试操作题简单,计算机期末考试操作题及答案计算机期末考试操作题及答案.doc...
- python中x y 1_Python的X[y==1, 0]
- 双向链表(不带头结点)
- 深入浅出VC++串口编程--基于Win32 API
- mysql数据库sql注入原理_sql注入原理详解(一)
- NOIP2014 写后感
- antdesign 柱状图_ant design pro (十)advanced 图表
- INDY流的发送和接收
- qt调试失败问题跟踪
- Java学习之基本概念
- 基于KELI5 新建一个STM32 project流程
- C++程序注册Dll
- 关于 联想昭阳 E43A 无线开关设置的 正确解决办法
- adb locat 过滤日志-命令行
- PID学习笔记:模拟加热系统的PID控制
- IT类实习/工作习惯心得
- [ECharts] Component legend is used but not imported.
热门文章
- 嫦娥四号的通讯速率,为何没有视频直播
- 管理感悟:知行合一与内化
- http status 400 – bad request 亚马逊_蛮拼的!这个亚马逊卖家为Prime Day做了这三大准备,销量暴涨58倍...
- c读取txt文件内容并建立一个链表_面试官给我挖坑:rm删除文件之后,空间就被释放了吗?...
- sdr 软件_SDR软件定义无线电是什么?不仅仅是大频谱
- get函数和getline函数
- 三、python环境的搭建之建建建
- Web 加速,协议先行!
- 解决 Composer 运行时的 Xdebug 冲突
- 学习date , clock , hwclork , cal, ls ,cd , pwd, tty, whereis , which ,stat, e