题意:给我们1*2的骨牌,问我们一个n*m的棋盘有多少种放满的方案。

思路:

状态压缩不懂看,http://blog.csdn.net/neng18/article/details/18425765

用1表示放置了骨牌,0表示没有放置。dp[i][j]表示第i行为状态j是有多少种方案。

分下面3种情况进行转移: d表示当前列号,s1 表示本行的状态,s2表示上一行的状态,

1 竖直放置   那么d=d+1,s1<<1|1 , s2<<1;

这是什么意思呢? 这表示上一行在d列没有放置骨牌,那么这一行必须放置。下面同理。

2 水平放置 那么 d=d+2,s1<<2|3,s2<<2|3;

3 不放置   那么 d=d+1,s1<<1,s2<<1|1;

初始化 d=1,s1=s2=0; 第一行放置时,可以虚拟第0行,看做已经放好了。那么他的情况就只有两种,见init()。

注意用大整型。

#include<iostream>
#include<algorithm>
const int N = 12;
const int maxn = 1<<N;
using namespace std;
int n,m;
__int64 dp[N][maxn];
void init(int d,int s)//初始化第一行
{
if(d == m+1)
{
dp[1][s]++;
return;
}
if(d + 1 <= m+1)
init(d+1,s<<1);//竖放
if(d + 2 <= m+1)
init(d+2,s<<2|3);//平放
}
void dfs(int d,int s1,int s2,int row)//d对应当前列号,s1对应本行,s2对应上的状态,row为当前行号
{
if(d == m+1)
{ dp[row][s1]+=dp[row-1][s2]; return ; }
if(d + 1 <= m+1)
{
dfs(d+1,s1<<1|1,s2<<1,row);//竖放
dfs(d+1,s1<<1,s2<<1|1,row);//不放
}
if(d + 2 <= m+1)
dfs(d+2,s1<<2|3,s2<<2|3,row);//平放
}
int main()
{ while(scanf("%d%d",&n,&m)!=EOF && (m || n))
{
if((m*n)%2) { puts("0"); continue; }//都为奇数时候放不下。
memset(dp,0,sizeof(dp));
init(1,0);
for(int i=2;i<=n;i++)
dfs(1,0,0,i);
printf("%I64d\n",dp[n][(1<<m)-1]);
}
return 0;
}

poj 2411 Mondriaan's Dream_状态压缩dp的更多相关文章

  1. poj 2411 Mondriaan's Dream(状态压缩dP)

    题目:http://poj.org/problem?id=2411 Input The input contains several test cases. Each test case is mad ...

  2. poj 2411 Mondriaan&#39;s Dream 【dp】

    题目:id=2411" target="_blank">poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然 ...

  3. POJ 1691 Painting a Board(状态压缩DP)

    Description The CE digital company has built an Automatic Painting Machine (APM) to paint a flat boa ...

  4. poj 3311 floyd+dfs或状态压缩dp 两种方法

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6436   Accepted: 3470 ...

  5. POJ 2686_Traveling by Stagecoach【状态压缩DP】

    题意: 一共有m个城市,城市之间有双向路连接,一个人有n张马车票,一张马车票只能走一条路,走一条路的时间为这条路的长度除以使用的马车票上规定的马车数,问这个人从a出发到b最少使用时间. 分析: 状态压 ...

  6. POJ_2411_Mondriaan's Dream_状态压缩dp

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 15407   Accepted: 888 ...

  7. 【poj2411】Mondriaan's Dream 状态压缩dp

    AC传送门:http://vjudge.net/problem/POJ-2411 [题目大意] 有一个W行H列的广场,需要用1*2小砖铺盖,小砖之间互相不能重叠,问有多少种不同的铺法? [题解] 对于 ...

  8. poj 1185 炮兵阵地 [经典状态压缩DP]

    题意:略. 思路:由于每个大炮射程为2,所以如果对每一行状态压缩的话,能对它造成影响的就是上面的两行. 这里用dp[row][state1][state2]表示第row行状态为state2,第row- ...

  9. POJ 1038 Bug Integrated Inc(状态压缩DP)

    Description Bugs Integrated, Inc. is a major manufacturer of advanced memory chips. They are launchi ...

随机推荐

  1. Android驱动之 Linux Input子系统之TP——A/B(Slot)协议

    将A/B协议这部分单独拿出来说一方面是因为这部分内容是比较容易忽视的,周围大多数用到input子系统的开发人员也不甚理解:另一方面是由于这部分知识一旦扩展到TP(触摸屏Touch Panel)的多点触 ...

  2. phpcms:一、安装及新建模板

    1.复制D:\WWW\phpcms\phpcms\templates\目录下的default文件粘贴在当前目录下,并重命名为新模板名字(youpinzhiyuan2012) 2.打开D:\WWW\ph ...

  3. qwtplot3D安装及运行-----终结解决方案

    ..\qwtplot3d\include\qwt3d_openglhelper.h:67: 错误:'gluErrorString' was not declared in this scope..\q ...

  4. Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作

    必须的准备工作 一.MySQL的安装.可以参考博文: http://blog.csdn.net/jueblog/article/details/9499245 二.下载 jdbc 驱动.可以从在官网上 ...

  5. Mysql配置调优(转自阿铭论坛)

    Mysql配置文件my.cnf参数优化对于新手来讲,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不同的网站,及其在线量,访问量,帖子数量,网络情况,以及机器硬件配置都有关系,优化不可能一 ...

  6. Web项目去掉Js文件红叉

    项目用到jquery,但将Jquery拷进去后,js文件有个红叉,看上去非常不爽.如下图: 解决方法: 1.找到项目下的.project文件 2.去掉Javascript验证 <?xml ver ...

  7. 传感器仿真平台——UI绘制模块(二)

    这一章讲的是UI绘制模块 该模块的作用是将实验对象绘制出来,它可能是目标.传感器等等,由于事先并不知道会有哪些物体,也无法事先定义好某个对象该怎么画,以我懒人的性格,得了,就抛给用的人吧~喝前摇一摇, ...

  8. (转).net程序员转战android第一篇---环境部署

    原文,整个序列一样http://www.cnblogs.com/Twmin/p/3148892.html 对于.net开发人员去写java,可谓说是见山是山, 因为太多的相同; 最近段时间因工作因素, ...

  9. ORacle 复制表

    create table r_register_company as select companyid,companyname,from grdata.r_register_company inser ...

  10. linux syslog详解

    linux syslog详解 分三部分 一.syslog协议介绍 二.syslog函数 三.linux syslog配置   一.syslog协议介绍 1.介绍 在Unix类操作系统上,syslog广 ...