BZOJ 2331 地板
妈妈我会写插头dp了!!!!!!。。。。
感动啊。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 105
#define maxs 200000
#define mod 20110520
using namespace std;
int n,m,map[maxn][maxn],dp[][][maxs],tab[maxs][],table[];
int s1[maxn],s2[maxn],top=;
int pt[][];
char s[maxn];
void ex()
{
for (int i=;i<=n;i++)
for (int j=i+;j<=m;j++)
swap(map[i][j],map[j][i]);
swap(n,m);
}
void get_table()
{
table[]=;
for (int i=;i<=;i++) table[i]=table[i-]*;
for (int i=;i<;i++)
{
tab[i][]=tab[i-][]+;int flag=;
if (tab[i][]==) {flag=;tab[i][]=;}
for (int j=;j<=;j++)
{
tab[i][j]=tab[i-][j]+flag;
if (tab[i][j]==) {flag=;tab[i][j]=;}
else flag=;
}
}
int cnt=;
for (int i=;i<=;i++)
for (int j=;j<=;j++)
{cnt++;pt[cnt][]=i;pt[cnt][]=j;}
}
void modify(int x,int bs)
{
s1[]=bs;s2[]=pt[x][];s1[]=bs+;s2[]=pt[x][];
top=;
}
int find(int x)
{
int a[],data=;
for (int i=;i<=;i++) a[i]=tab[x][i];
for (int i=;i<=top;i++) a[s1[i]]=s2[i];
for (int i=;i>=;i--) data=data*+a[i];
return data;
}
void plug_dp()
{
dp[][m&][]=;
for (int i=;i<=n;i++)
{
memset(dp[i&],,sizeof(dp[i&]));
for (int j=;j<table[m];j++) dp[i&][][j*]=dp[(i&)^][m&][j];
for (int j=;j<=m;j++)
{
for (int k=;k<table[m+];k++) dp[i&][j&][k]=;
for (int k=;k<table[m+];k++)
{
if (map[i][j])
{
if ((tab[k][j-]==) && (tab[k][j]==))
{
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
}
else if ((tab[k][j-]==) && (tab[k][j]==))
{
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
}
else if ((tab[k][j-]==) && (tab[k][j]==))
{
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
}
else if ((tab[k][j-]==) && (tab[k][j]==))
{
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
}
else if ((tab[k][j-]==) && (tab[k][j]==))
{
//nothing here.
}
else if ((tab[k][j-]==) && (tab[k][j]==))
{
//nothing here.
}
else if ((tab[k][j-]==) && (tab[k][j]==))
{
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;
}
else if ((tab[k][j-]==) && (tab[k][j]==))
{
//nothing here.
}
else {modify(,j-);dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][find(k)])%mod;}
}
else
if ((tab[k][j-]==) && (tab[k][j]==))
dp[i&][j&][k]=(dp[i&][j&][k]+dp[i&][(j&)^][k])%mod;
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
{
scanf("%s",s);
for (int j=;j<=m;j++)
{
if (s[j-]=='_') map[i][j]=;
else map[i][j]=;
}
}
if (n<m) ex();
get_table();
plug_dp();
printf("%d\n",dp[n&][m&][]);
return ;
}
BZOJ 2331 地板的更多相关文章
- bzoj 2331: [SCOI2011]地板 插头DP
2331: [SCOI2011]地板 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 541 Solved: 239[Submit][Status] D ...
- bzoj:2331: [SCOI2011]地板
Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板.现在小L想知道,用 ...
- BZOJ 2331 [SCOI2011]地板 ——插头DP
[题目分析] 经典题目,插头DP. switch 套 switch 代码瞬间清爽了. [代码] #include <cstdio> #include <cstring> #in ...
- bzoj 2331: [SCOI2011]地板【插头dp】
一开始设计了四种状态,多了一种已经拐弯但是长度为0的情况,后来发现不用,设012表示没插头,没拐弯的插头,拐了弯的插头,然后转移的话12,21,22都不合法,剩下的转移脑补一下即可,ans只能在11, ...
- [入门向选讲] 插头DP:从零概念到入门 (例题:HDU1693 COGS1283 BZOJ2310 BZOJ2331)
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7326874.html 最近搞了一下插头DP的基础知识……这真的是一种很锻炼人的题型…… 每一道题的状态都不一样 ...
- 插头DP学习笔记——从入门到……????
我们今天来学习插头DP??? BZOJ 2595:[Wc2008]游览计划 Input 第一行有两个整数,N和 M,描述方块的数目. 接下来 N行, 每行有 M 个非负整数, 如果该整数为 0, 则该 ...
- 【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表示有一个必须延伸至少一格且拐弯的插头, ...
随机推荐
- js中tagName和nodeName
DOM里常见的三种节点类型(总共有12种,如docment):元素节点,属性节点以及文本节点,例如<h2 class="title">head</h2>,其 ...
- (09)odoo工作流
--------------修订时间14:54 2016-09-18 星期日21:59 2016-06-12 星期日10:06 2016-02-24 星期三17:14 2016-01-29 星期五-- ...
- 多条查询sql语句返回多表数据集
+ + "';SELECT ProductID,ProductTitle,ProductName,SalePrice,ListingPrice,MainPicture,SaledItemCo ...
- java中汉字自动转换成拼音
java中汉字自动转换成拼音 1.需要下载jar包 pinyin4j.2.5.0.jar ,加入到WEB-INF下的lib里边,右键add to bulid path. 2.[代码]PinYinUti ...
- CSS3发光字动画
;} img{ width:200px; height:200px; border:2px solid #000} .back h5 { font-size: 4em; color: #f2050b; ...
- javascript 把字符串转换为对象
function strToJson(str) { var json = (new Function("return " + str))(); return json;}
- ACTIVITI 研究代码 之 模版模式
模板方法模式需要开发抽象类和具体子类的设计师之间的协作.一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤.代表这些具体逻辑步骤的方法称做基本方法(primitive ...
- 使用WebView视图显示网页-----迷你浏览器
Android提供了WebView组件,表面上来看,这个组件与普通ImageView差不多,但实际上,这个组件的功能要强大得多,WebView组件本身就是一个浏览器实现,它的内核基于开源WebKit引 ...
- 第48套题【tarjan】【图&树的连通性】【并查集】
Problem 1 图的连通性
- WP8 学习 在APP.XAML中加入Resources
<Application.Resources> <local:LocalizedStrings xmlns:local="clr-namespace:test1" ...