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表示有一个必须延伸至少一格且拐弯的插头, ...
随机推荐
- java synchronized类锁,对象锁详解(转载)
觉得还不错 留个记录,转载自http://zhh9106.iteye.com/blog/2151791 在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看 ...
- hdu----(5045)Contest(数位dp)
Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...
- IO流--切割 合并文件
import java.io.*; import java.util.*; public class io { public static void main(String[] args)throws ...
- 用XmlSerializer进行xml反序列化的时候,程序报错: 不应有 <xml xmlns=''>
原因 一,类型错误: 比如xml本来是UserInfo类型 用XmlSerializer进行反序列化传入的类型是MemberInfo这就会报错 二,xml根节点和对象的类名不一致,而又没有对类加入[X ...
- Anysys Fluent安装教程
按顺序按照在一个文件夹内D:\Anysys Fluent 1:安装Exceed 调整电脑时间至2005年(前辈经验) 点击解压好的Exceed.13.[x86+x64]文件夹中的M ...
- 用JavaScript操作Media Queries
在响应式(或自适应)设计中要用到Media Queries这个CSS属性,但在某些时候我们需要对Media Queries进行动态操作,这时候可以使用Javascript. 如以下Media Quer ...
- js仿京东轮播图效果
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- spring校验相关
转载:http://elim.iteye.com/blog/1812584 对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证 ...
- 扫盲如何在ECLIPSE中使用条件断点
有时候在编码的时候我们希望知道代码变量符合某个条件时,才中断点,其他的情况不中断点. 解决办法1: 我们写个代码 判断,符合条件在符合条件处进行断点,这个方法很麻烦,需要去修改代码,不要是还需 ...
- mysql 远程连接速度慢的解决方案
PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS ...