【poj2411】Mondriaan's Dream 状态压缩dp
AC传送门:http://vjudge.net/problem/POJ-2411
【题目大意】
有一个W行H列的广场,需要用1*2小砖铺盖,小砖之间互相不能重叠,问有多少种不同的铺法?
【题解】
对于每一行有w个位置,所以每一行都有0~2w-1种状态。
对于当前行的状态s,它是由前一行的状态s’转化过来的,显然,对于该行某个位置j:
如果前一行该位置为0,那么该位置可以竖放 即 0-> 1
如果前一行连续两个位置为0,那么这两个连续位置可以横放 即00-> 00
如果前一行该位置为1,显然该位置不能再放,于是应该把该位置设置为0 ,即1-> 0
/*************
poj 2411
by chty
2016.11.15
*************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
#define FILE "read"
#define up(i,j,n) for(int i=j;i<=n;i++)
namespace INIT{
char buf[1<<15],*fs,*ft;
inline char getc() {return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
inline int read(){
int x=0,f=1; char ch=getc();
while(!isdigit(ch)) {if(ch=='-') f=-1; ch=getc();}
while(isdigit(ch)) {x=x*10+ch-'0'; ch=getc();}
return x*f;
}
}using namespace INIT;
int n,m;
long long f[15][2500];
void dfs(int i,int s1,int s2,int next){
if(next>m) return;
if(next==m) f[i+1][s2]+=f[i][s1];
else if((s2&(1<<next))==0){
dfs(i,s1,s2|(1<<next),next+1);
if((s2&(1<<(next+1)))==0) dfs(i,s1,s2,next+2);
}
else dfs(i,s1,s2&~(1<<next),next+1);
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
while(~scanf("%d%d",&n,&m)&&n&&m){
memset(f,0,sizeof(f)); f[1][0]=1;
up(i,1,n) up(j,0,(1<<m)-1) if(f[i][j]) dfs(i,j,j,0);
printf("%lld\n",f[n+1][0]);
}
return 0;
}
【poj2411】Mondriaan's Dream 状态压缩dp的更多相关文章
- POJ2411 - Mondriaan's Dream(状态压缩DP)
		题目大意 给定一个N*M大小的地板,要求你用1*2大小的砖块把地板铺满,问你有多少种方案? 题解 刚开始时看的是挑战程序设计竞赛上的关于铺砖块问题的讲解,研究一两天楞是没明白它代码是怎么写的,智商捉急 ... 
- poj 2411 Mondriaan's Dream(状态压缩dP)
		题目:http://poj.org/problem?id=2411 Input The input contains several test cases. Each test case is mad ... 
- poj2411 Mondriaan's Dream (轮廓线dp、状压dp)
		Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17203 Accepted: 991 ... 
- poj 2411 Mondriaan's Dream_状态压缩dp
		题意:给我们1*2的骨牌,问我们一个n*m的棋盘有多少种放满的方案. 思路: 状态压缩不懂看,http://blog.csdn.net/neng18/article/details/18425765 ... 
- [poj2411] Mondriaan's Dream (状压DP)
		状压DP Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One nigh ... 
- POJ2411 Mondriaan's Dream 题解 轮廓线DP
		题目链接:http://poj.org/problem?id=2411 题目大意 给你一个 \(n \times m (1 \le n,m \le 11)\) 的矩阵,你需要用若干 \(1 \time ... 
- 【POJ2411】Mondriaan's Dream(轮廓线DP)
		[POJ2411]Mondriaan's Dream(轮廓线DP) 题面 Vjudge 题解 这题我会大力状压!!! 时间复杂度大概是\(O(2^{2n}n^2)\),设\(f[i][S]\)表示当前 ... 
- 状态压缩dp(hdu2167,poj2411)
		hdu2167 http://acm.hdu.edu.cn/showproblem.php?pid=2167 给定一个N*N的板子,里面有N*N个数字,选中一些数字,使得和最大 要求任意两个选中的数字 ... 
- 状态压缩DP(大佬写的很好,转来看)
		奉上大佬博客 https://blog.csdn.net/accry/article/details/6607703 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的 ... 
随机推荐
- Transaction ACID (转载)
			Transaction 原文出处: 黄勇 Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废.�0�2事务也是这样,不能做一般 ... 
- 使用  某款基于Socks5协议的代理软件  一段时间后   被封锁掉IP的一些技术思考
			由于关键词比较敏感为了不被删除帖子所以文中某软件(上图所示软件)不用全称表示. 去年9月末在 在某国外网站 上弄了一个vpn,在上面安装了某软件,使用起来还是蛮不错的,平时查查英文论文,看看美剧还是比 ... 
- 配置Yaf
			pecl里面的yaf最新测试版http://pecl.php.net/package/Yaf 安装pcre 要先安装pcre, Debian ubuntu执行 sudo apt-get install ... 
- springboot项目中文件的下载(解决中文乱码问题)
			最近使用springboot项目,一直以来文件都以英文格式存储,这次使用的是xls文件下载,文件名为中文的,特此记录下中文文件名的下载以及springboot中下载路径报错问题. 正文 在使用spri ... 
- [Luogu4899][IOI2018] werewolf 狼人
			luogu sol \(\mbox{IOI2018}\)的出题人有没有看过\(\mbox{NOI2018}\)的题目呀... \(\mbox{Kruskal}\)重构树+二维数点. 题目相当于是问你从 ... 
- Mac OS下面安装mysql以及mysql常用命令
			使用brew安装mysql brew install mysql 安装成功后使用下面命令启动/关闭服务 brew services start mysql brew services stop mys ... 
- 结构化日志类库  ----  Serilog库
			在过去的几年中,结构化日志已经大受欢迎.而Serilog是 .NET 中最著名的结构化日志类库 ,我们提供了这份的精简指南来帮助你快速了解并运用它. 0. 内容 设定目标 认识Serilog 事件和级 ... 
- CentOS6.6 VSFTP服务器安装设置
			1:安装vsftpd yum install vsftpd 2:关闭防火墙 service iptables stop 3:允许21端口通行 vi /etc/sysconfig/iptables ... 
- 02 - Unit05:加载笔记列表
			加载笔记列表 发送Ajax请求 绑定发送事件 获取参数: bookId 发送请求: /note/list.do 事件绑定 $(function(){ Ajax请求发送-->服务器处理--> ... 
- GCC 三
			前记: 经常浏览博客园的同学应该会觉得本文有标题党之嫌,这个标题的句式来自于MiloYip大牛的大作<C++强大背后>,在此,向Milo兄致意. GCC,全称GNU Compiler Co ... 
