POJ2411 Mondriaan's Dream 【状压dp】

原创 2017年03月26日 08:46:29

题目链接:http://poj.org/problem?id=2411

题意:
有一个n*m的矩形,有若干个2*1的小长方形,问用小长方形把这个矩形铺满的方案书,多组输入,以 0 0为结束

题解:
在某行中,用一个二进制串来表示铺的情况,0表示当前格子没铺,1表示当前格子铺了,然后YY一下转移,输出dp[n][(2^m)-1],这里的^表示的是幂。
也可以写成:blog上写不出<<啊 QWQ
注意一下位运算的优先级!被坑了!

代码:

#include <cstdio>
#include <cstring>

const int size = (1 << 15) +5;
typedef long long LL;
LL a[15][size];
int n, m;

void init(int d, int s) {
    if(d == m+1) {
        a[1][s] ++;
        return ;
    }

    if( d <= m ) init(d+1, s << 1);
    if( d < m ) init(d+2, s << 2 | 3);
}   

void dfs(int d, int s1, int s2, int t) {
    if(d == m+1) {
        a[t][s1] += a[t-1][s2];
        return ;
    }
    if(d <= m) {
        dfs(d+1, s1 << 1 | 1, s2 << 1, t);
        dfs(d+1, s1 << 1, s2 << 1 | 1, t);
    }
    if(d < m) dfs(d+2, s1 << 2|3, s2 << 2 | 3, t);
}

int swap(int &x, int &y) {
    int t = x; x = y; y = t;
}

int main() {
    while( scanf("%d %d", &n, &m), n+m ) {
        if((n*m)%2) {
            puts("0");
            continue;
        }
        memset(a, 0, sizeof(a));
        if(n > m) swap(n, m);
        init(1, 0);
        for ( int i = 2; i <= n; i ++ ) dfs(1, 0, 0, i);
        printf("%lld\n", a[n][(1<<m)-1]);
    }

    return 0;
}
版权声明:博主小白,如有不当请指出!

poj2411Mondriaan's Dream题解

题目大意:给出h*w(1≤h、w≤11)的方格棋盘,用1*2 的长方形骨牌不重叠地覆盖这个 棋盘,求覆盖满的方案数。 输入文件包含多组数据。 每组数据有一行,两个正整数h,w。 输入结束标志为...
  • qq_27138357
  • qq_27138357
  • 2015年08月01日 17:43
  • 467

poj2411--Mondriaan's Dream(状压dp+dfs)

Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 12315...
  • u013015642
  • u013015642
  • 2015年02月04日 20:49
  • 837

POJ2411:Mondriaan's Dream(状态压缩)

Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, a...
  • libin56842
  • libin56842
  • 2014年05月04日 22:44
  • 2685

POJ-2411-Mondriaan's Dream-轮廓线dp(插头dp)

题意:在n*m的方格里铺1*2的骨牌,有多少种可能,首先可以排除一些特殊情况,n*m是奇数,就是0 n或m是1就是1(已经排除n*m的情况)。然后就和我之前写的hdu1992的插头dp一样 #in...
  • lyc1635566ty
  • lyc1635566ty
  • 2016年08月09日 00:31
  • 418

POJ2411——Mondriaan's Dream(轮廓线dp入门)

Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 1520...
  • say_c_box
  • say_c_box
  • 2016年08月03日 20:12
  • 435

poj 2411 Mondriaan's Dream(状态压缩dp)

Mondriaan's Dream Description Squares and rectangles fascinated the famous Dutch painter P...
  • u014634338
  • u014634338
  • 2015年11月24日 17:27
  • 888

【POJ2411】Mondriaan's Dream-状态压缩DP(插头DP?)

【POJ2411】Mondriaan's Dream-状态压缩DP(插头DP?)
  • Maxwei_wzj
  • Maxwei_wzj
  • 2017年03月20日 17:46
  • 259

poj2411 Mondriaan's Dream 插头dp做法

Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 11379...
  • smz436487
  • smz436487
  • 2014年07月25日 13:56
  • 251

POJ2411:Mondriaan's Dream(状压dp)

Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 16037...
  • junior19
  • junior19
  • 2017年02月19日 20:23
  • 115

poj2411 Mondriaan's Dream 状压dp

poj2411 Mondriaan’s Dream 题目大意: 1*2的方砖铺n*m的地面。n,m
  • yxr0105
  • yxr0105
  • 2016年01月27日 14:53
  • 262
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:POJ2411 Mondriaan's Dream 【状压dp】
举报原因:
原因补充:

(最多只允许输入30个字)