bzoj:2331: [SCOI2011]地板
Description
lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西。小L家的客厅是一个
的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板。现在小L想知道,用L型的地板铺满整个客厅有多少种不同的方案?
需要注意的是,如下图所示,L型地板的两端长度可以任意变化,但不能长度为0。铺设完成后,客厅里面所有没有柱子的地方都必须铺上地板,但同一个地方不能被铺多次。

Input
输入的第一行包含两个整数,R和C,表示客厅的大小。
接着是R行,每行C个字符。’_’表示对应的位置是空的,必须铺地板;’*’表示对应的位置有柱子,不能铺地板。
Output
输出一行,包含一个整数,表示铺满整个客厅的方案数。由于这个数可能很大,只需输出它除以20110520的余数。
Sample Input
*_
__
Sample Output

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=;
const int MAXN=;
int i;
struct na{
int x,z;
na(int xx,int zz):x(xx),z(zz){}
};
int n,m,x,y,z,a[],k,p1,p2,en,t;
bool map[][];
int f[][MAXN+],ans=;
int v[][MAXN+];
queue <na> q;
inline int gx(int x,int q1,int q2){k=;for (register int i=m+;i;i--) k=k*+(i==x?q1:(i==x+?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%;
if (v[k][z]!=r) v[k][z]=r,f[k][z]=,q.push(na(r,z));
f[k][z]+=lj;if (f[k][z]>=INF) f[k][z]-=INF;
}
char c[];
int main(){
register int i,j,p;
scanf("%d%d",&n,&m);
if (n<m){
swap(n,m);
for (j=;j<=m;j++){
scanf("%s",c);
for (i=;i<=n;i++)
map[j][i]=c[i-]=='_';
}
}else{
for (j=;j<=n;j++){
scanf("%s",c);
for (i=;i<=m;i++)
map[i][j]=c[i-]=='_';
}
}
en=n*m-;
while(!map[en%m+][en/m+]) en--;
f[][]=v[][]=;
q.push(na(,));
while(!q.empty()){
na no=q.front();q.pop();
int an=f[no.x%][no.z];
if(no.x%m==) no.z*=;
x=no.x%m+;y=no.x/m+;
for (i=;i<=m+;i++) a[i]=;
for (i=,j=no.z;j;i++,j/=) a[i]=j%;
if (!map[x][y]) up(no.x,gx(,,),an);else
if (a[x]==&&a[x+]==) up(no.x,gx(x,,),an);else
if (a[x]==&&a[x+]==){
if (map[x+][y]) up(no.x,gx(x,,),an);
if (map[x][y+]) up(no.x,gx(x,,),an);
if (map[x][y+]&&map[x+][y]) up(no.x,gx(x,,),an);
}else
if (a[x]==){
if (map[x][y+]) up(no.x,gx(x,a[x+],),an);
if (map[x+][y]&&a[x+]==) up(no.x,gx(x,,),an);
if (a[x+]==) up(no.x,gx(x,,),an);
}else
if (a[x+]==){
if (map[x+][y]) up(no.x,gx(x,,a[x]),an);
if (map[x][y+]&&a[x]==) up(no.x,gx(x,,),an);
if (a[x]==) up(no.x,gx(x,,),an);
}
}
printf("%d\n",ans);
}
bzoj:2331: [SCOI2011]地板的更多相关文章
- bzoj 2331: [SCOI2011]地板 插头DP
2331: [SCOI2011]地板 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 541 Solved: 239[Submit][Status] D ...
- BZOJ 2331 [SCOI2011]地板 ——插头DP
[题目分析] 经典题目,插头DP. switch 套 switch 代码瞬间清爽了. [代码] #include <cstdio> #include <cstring> #in ...
- bzoj 2331: [SCOI2011]地板【插头dp】
一开始设计了四种状态,多了一种已经拐弯但是长度为0的情况,后来发现不用,设012表示没插头,没拐弯的插头,拐了弯的插头,然后转移的话12,21,22都不合法,剩下的转移脑补一下即可,ans只能在11, ...
- 【BZOJ】2331: [SCOI2011]地板
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2331 一眼插头DP... 考虑一个L形的东西,要构成它可以划分为两个阶段,即当前线段是拐了 ...
- 【BZOJ】2331: [SCOI2011]地板 插头DP
[题意]给定n*m的地板,有一些障碍格,要求用L型的方块不重不漏填满的方案数.L型方块是从一个方格向任意两个相邻方向延伸的方块,不能不延伸.n*m<=100. [算法]插头DP [题解]状态0表 ...
- 2331: [SCOI2011]地板 插头DP
国际惯例的题面:十分显然的插头DP.由于R*C<=100,所以min(R,C)<=10,然后就可以愉悦地状压啦.我们用三进制状压,0表示没有插头,1表示有一个必须延伸至少一格且拐弯的插头, ...
- 【BZOJ2331】[SCOI2011]地板 插头DP
[BZOJ2331][SCOI2011]地板 Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里 ...
- BZOJ 2331 地板
妈妈我会写插头dp了!!!!!!.... 感动啊... #include<iostream> #include<cstdio> #include<cstring> ...
- BZOJ2331:[SCOI2011]地板——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2331 题面复制于洛谷 题目描述 lxhgww的小名叫”小L“,这是因为他总是很喜欢L型的东西.小L家 ...
随机推荐
- 用于文件系统的C库函数
9/20/2017 学<LINUX C编程实战>中 1.打开 File *fopen(const char *path , const char * mode); fopen实现打开指定的 ...
- 模板引擎(smarty)知识点总结
首先我们必须知道使用smarty的流程 1.引入 2.实例化 3.配置 模板目录 编译目录 3.0版本 支持不存在的目录则新建 4.赋值 5.编译显示 某个模板文件(暗示需要哪 ...
- du 命令详解
du : show disk usage 作用:统计目录或文件所占用磁盘空间的大小. 语法:du 参数 选项 参数: -a 为每个制定文件显示磁盘使用情况, 或者为目录中每个文件显示各自磁盘使用情况 ...
- Webpack 2 视频教程 015 - Webpack 2 中的文件压缩
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- Office 365也是.NET Core应用开发新战场
最近有幸阅读了陈希章花了一年时间为国内开发者贡献的<Office 365 开发入门指南>. 虽然早期接触过SharePoint的开发,2007年之后就再也没有接触SharePoint的开发 ...
- NPOI 1.2 教程
NPOI 1.2 教程官方地址 很多人可能对NPOI还很陌生,别担心,通过本教程你将对NPOI有进一步的认识和理解. 目录 1. 认识NPOI 2. 使用NPOI生成xls文件 2.1 创建基本内容 ...
- java多线程(三)-Executors实现的几种线程池以及Callable
从java5开始,类库中引入了很多新的管理调度线程的API,最常用的就是Executor(执行器)框架.Executor帮助程序员管理Thread对象,简化了并发编程,它其实就是在 提供了一个中间层, ...
- npm 项目更换目录后无法启动
问题描述: 使用 Vue-cli 创建的项目,当文件移动到其他目录后,无法正常启动,报错信息如下: 分析原因: npm 项目,在安装依赖(node_modules)的时候,会记录当前的文件路径.当路径 ...
- Head First设计模式之适配器模式
一.定义 适配器模式把一个类的接口,变换成客户端所期待的另一种接口,使原本因接口不匹配的两个类能够在一起工作. 二.结构 角色: Client:用户类,使用新接口Target来完成某些特定的需求. T ...
- Center OS 7 安装 $$
资料来自网络,收集整理做个备忘 1. 安装Python # yum install python-setuptools && easy_install pip 2. 安装$$ # pi ...