Description

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

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

R*C<=100

Solution

插头DP,用三进制表示状态,0表示无插头,1表示有插头且可以转向,2表示有插头但不可转向

转移如下,

  1. 00 To 22/10/01
  2. 11 To 00
  3. 10 To 20/01
  4. 20 To 00/02
  5. 01 To 10/02
  6. 02 To 00/20

Code

#include <cstdio>
#include <algorithm>
#define N 14
using namespace std; const int mod=20110520;
int n,m,A[N],now,dp[2][N][200000];//滚动数组
char g[N][N]; int main(){
A[0]=1;for(int i=1;i<=12;++i)A[i]=A[i-1]*3;
scanf("%d%d\n",&n,&m);
for(int i=1;i<=n;++i,scanf("\n"))
for(int j=1;j<=m;++j)
if(n>m) scanf("%c",&g[i][j]);else scanf("%c",&g[j][i]);
if(n<m) swap(n,m);//将大的用来滚动
dp[0][m][0]=1;
for(int i=1;i<=n;++i){
now^=1;
for(int j=0;j<A[m];++j) dp[now][0][j*3]=dp[now^1][m][j];
for(int j=1;j<=m;++j)
for(int k=0;k<A[m+1];++k){
int l=k/A[j-1]%3,r=k/A[j]%3;
if(g[i][j]=='_'){
if(!l&&!r) dp[now][j][k]=(dp[now][j-1][k+(A[j]<<1)+(A[j-1]<<1)]+dp[now][j-1][k+A[j]]+dp[now][j-1][k+A[j-1]])%mod;
else if(l==1&&r==1) dp[now][j][k]=dp[now][j-1][k-A[j]-A[j-1]];
else if(l==1&&!r) dp[now][j][k]=(dp[now][j-1][k+A[j-1]]+dp[now][j-1][k-A[j-1]+A[j]])%mod;
else if(l==2&&!r) dp[now][j][k]=(dp[now][j-1][k-(A[j-1]<<1)]+dp[now][j-1][k-(A[j-1]<<1)+(A[j]<<1)])%mod;
else if(!l&&r==1) dp[now][j][k]=(dp[now][j-1][k-A[j]+A[j-1]]+dp[now][j-1][k+A[j]])%mod;
else if(!l&&r==2) dp[now][j][k]=(dp[now][j-1][k-(A[j]<<1)]+dp[now][j-1][k-(A[j]<<1)+(A[j-1]<<1)])%mod;
else dp[now][j][k]=0;//注意清零
}else if(!l&&!r) dp[now][j][k]=dp[now][j-1][k];else dp[now][j][k]=0;//
}
}
printf("%d\n",dp[now][m][0]);
return 0;
}

[BZOJ2331]地板(插头DP)的更多相关文章

  1. [SCOI2011][bzoj2331] 地板 [插头dp]

    题面: 传送门 思路: 插头dp基础教程 这个L形......第一眼看上去真的是丧病啊 但是仔细想想,实际上也就是拿一堆路径铺满一个棋盘,这个路径还是有限制的 那还有什么好说的,插头dp上啊[雾] 首 ...

  2. bzoj 2331: [SCOI2011]地板 插头DP

    2331: [SCOI2011]地板 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 541  Solved: 239[Submit][Status] D ...

  3. 2331: [SCOI2011]地板 插头DP

    国际惯例的题面:十分显然的插头DP.由于R*C<=100,所以min(R,C)<=10,然后就可以愉悦地状压啦.我们用三进制状压,0表示没有插头,1表示有一个必须延伸至少一格且拐弯的插头, ...

  4. 【BZOJ】2331: [SCOI2011]地板 插头DP

    [题意]给定n*m的地板,有一些障碍格,要求用L型的方块不重不漏填满的方案数.L型方块是从一个方格向任意两个相邻方向延伸的方块,不能不延伸.n*m<=100. [算法]插头DP [题解]状态0表 ...

  5. BZOJ 2331 [SCOI2011]地板 ——插头DP

    [题目分析] 经典题目,插头DP. switch 套 switch 代码瞬间清爽了. [代码] #include <cstdio> #include <cstring> #in ...

  6. 【BZOJ2331】[SCOI2011]地板 插头DP

    [BZOJ2331][SCOI2011]地板 Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里 ...

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

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

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

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

  9. 插头dp初探

    问题描述 插头dp用于解决一类可基于图连通性递推的问题.用插头来表示轮廓线上的连通性,然后根据连通性与下一位结合讨论进行转移. 表示连通性的方法 与字符串循环最小表示不同,这种方法用于给轮廓线上的联通 ...

随机推荐

  1. css中 repeat-x 的简单用法

    问repeat-x 00 中: 0 0 是 什么意思,如果改为0 -50呢,不写话默认是什么(不写话和0 0  的效果不一样)- ------<html><head><s ...

  2. 使用Foxfly.Net读取STEP文件

    Foxfly.Net是具备基本的几何建模和CAD文件读取功能.本文主要介绍读取STP/STEP文件的使用方法. 1.初始化 项目中引入FoxflyNet.dll程序集,在Program.cs中初始化建 ...

  3. [备忘]java 静态块、非静态块、静态函数、构造函数 执行顺序

    原文链接:http://liqita.iteye.com/blog/1472717 java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的static,都是最先初始 ...

  4. 【解决】Git failed with a fatal error. Authentication failed for ‘http://......’

    今天在visual studio中运行项目,打算pull最新的代码的时候,报错: Git failed with a fatal error. Authentication failed for ‘h ...

  5. nmap -sT -A --script=smb-check-vulns -PO 172.16.21.170

    nmap -sT -A --script=smb-check-vulns -PO 172.16.21.170 调用了nmap的插件--script=smb-check-vulns -sT 隐蔽的tcp ...

  6. 重置 file input

    有时用户上传相同附件时也需要触发input[type='file']的change事件,除了将form重置外,还可以将input的value设为空 <input type="file& ...

  7. 实战:ADFS3.0单点登录系列-集成Exchange

    本文将介绍如何将Exchange与ADFS集成,从而实现对于Exchange的SSO. 目录: 实战:ADFS3.0单点登录系列-总览 实战:ADFS3.0单点登录系列-前置准备 实战:ADFS3.0 ...

  8. springMvc-视图模型封装及注解参数

    1.视图模型封装,ModelAndView可以向页面返回视图的同时吧模型也传入页面 2.注解参数,springMvc很好的地方在于简单,高效,@RequestParam注解能非常好的取得页面参数 代码 ...

  9. co-dialog弹出框组件-版本v2.0.0

    co-dialog theme 访问git:co-dialog 版本v2.0.0 主题2 coog.app('.theme2').use({ title: 'JUST CHECKING.', mess ...

  10. noip模拟赛#24

    这套题我只会写第二题...我... T1:给出一个含有向边和无向边的混合图,如何确定无向边的方向使得图中不存在环.保证有解.多解情况输出任意解. =>我往最大流的残量网络的方向去想了...因为混 ...