[poj P2411] Mondriaan's Dream

Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 18023   Accepted: 10327

Description

Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (where he had to use his toilet paper to draw on, for all of his paper was filled with squares and rectangles), he dreamt of filling a large rectangle with small rectangles of width 2 and height 1 in varying ways. 

Expert as he was in this material, he saw at a glance that he'll need a computer to calculate the number of ways to fill the large rectangle whose dimensions were integer values, as well. Help him, so that his dream won't turn into a nightmare!

Input

The input contains several test cases. Each test case is made up of two integer numbers: the height h and the width w of the large rectangle. Input is terminated by h=w=0. Otherwise, 1<=h,w<=11.

Output

For each test case, output the number of different ways the given rectangle can be filled with small rectangles of size 2 times 1. Assume the given large rectangle is oriented, i.e. count symmetrical tilings multiple times.

Sample Input

1 2
1 3
1 4
2 2
2 3
2 4
2 11
4 11
0 0

Sample Output

1
0
1
2
3
5
144
51205

Source

 
哎,我好弱啊。。。
一个状压DP都想不到。。。
先列出总转移方程:f[i][j]=sigma(ok(j,k))f[i-1][k]。
其中j,k是二进制状态,i是第几行。
那么,我们无非就是考虑第i行和第i-1行的状态是否兼容。
如何判断是否兼容?
对于两行k,k+1两个状态,第i位分别为u和d。
我们设状态里面“1”表示当前的格子已经被填了,且是被上一行填入;“0”表示未被填。
如果u==1且d==0,我们可以只能跳到下一列进行判断;否则,
如果u==1且d==1,显然这个状态是不合法的;否则,
如果u==0且d==0,那么上面那一行的下一列必定填入一个横排(且当前为0,表示还没有被填入),我们可以将它当做是被上一行填入的(即更改k行下一列的状态,0->1);否则
如果u==0且d==1,显然正好是当前列放一块竖的。
code:
 #include<cstdio>
 #include<cstring>
 #include<algorithm>
 #include<vector>
 #define LL long long
 #define idx(x,i) ((x>>i)&1)
 using namespace std;
 ;
 <<lim];
 vector <<<lim];
 bool jug(int su,int sd) {
     ; i<m; i++) {
         int ku=idx(su,i),kd=idx(sd,i);
         if (!kd&&ku) continue;
         ; else
         if (!kd) {
             &&!idx(su,i+)) su|=<<(i+); ;
         }
     }
     ;
 }
 int main() {
     while (scanf("%d%d",&n,&m),n|m) {
         S=<<m;
         ; i<S; i++) o[i].clear();
         ; i<S; i++)
             ; j<S; j++) if (jug(i,j)) o[j].push_back(i);
         memset(f,,][]=;
         ; i<=n; i++)
             ; j<S; j++)
                 ,s=o[j].size(); k<s; k++)
                 f[i][j]+=f[i-][o[j][k]];
         printf(]);
     }
     ;
 }

[poj P2411] Mondriaan's Dream的更多相关文章

  1. PKU P2411 Mondriaan's Dream

    PKU P2411 Mondriaan's Dream 题目描述: Squares and rectangles fascinated the famous Dutch painter Piet Mo ...

  2. POJ 2411 Mondriaan's Dream -- 状压DP

    题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过 ...

  3. POJ 2411 Mondriaan's Dream 插头dp

    题目链接: http://poj.org/problem?id=2411 Mondriaan's Dream Time Limit: 3000MSMemory Limit: 65536K 问题描述 S ...

  4. POJ - 2411 Mondriaan's Dream(轮廓线dp)

    Mondriaan's Dream Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One nig ...

  5. [POJ] 2411 Mondriaan's Dream

    Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 18903 Accepted: 10779 D ...

  6. [poj 2411]Mondriaan's Dream (状压dp)

    Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 18903 Accepted: 10779 D ...

  7. Poj 2411 Mondriaan's Dream(状压DP)

    Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Description Squares and rectangles fascina ...

  8. Poj 2411 Mondriaan's Dream(压缩矩阵DP)

    一.Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, ...

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

    Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...

随机推荐

  1. Ubuntu虚拟机识别不了SD卡的解决办法

    前提,你的虚拟机已经安装了VMware Tools. Step 1: 出现这种情况先查看计算机中的虚拟机的VMware USB Arbitration Service是否启用(注意是VMware US ...

  2. 逆向 AWS API 设计

    由于AWS并没有像Google一样公开出一份API Design Guide,所以只能根据 API 的模样去逆向工程最初的设计考量.既然上一篇介绍了很多 REST 的缺陷,那么这里也会介绍一下 AWS ...

  3. day07 Python文件操作

    一,文件操作基本流程 #1. 打开文件,得到文件句柄并赋值给一个变量 f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r #2. 通过句柄对文件进行操作 d ...

  4. Django框架详细介绍---ORM---图书信息系统专题训练

    from django.db import models # Create your models here. # 书 class Book(models.Model): title = models ...

  5. List 循环删除 指定元素的 方法

    使用Iterator进行循环,在删除指定元素.如果使用for 或 foreach 在删除指定下标是,list.size 会相应的缩短且下标前移,导致相邻满足条件的元素未删除 Iterator<S ...

  6. [autocomplete]如果条目末尾有空格,MustMatch不起作用

    如果mustMatch被激活,我们发现,当条目最后包含一个空格时,一旦我们从列表中选择值,它将被拒绝.我们已经发现了这个问题,它在搜索事件中:在第184行,您修剪了输入的值: $.each(trimW ...

  7. Oarcle之视图

    视图 什么是视图? (在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.我们可以向视图添加 S ...

  8. AndroBench手机性能测试【转】

    本文转载自:https://www.cnblogs.com/jiangzhishan/archive/2018/07/16/9316279.html AndroBench是一个基准测试应用程序,可以衡 ...

  9. jQuery validator plugin之Validator

    Validator.destroy() Destroys this instance of validator freeing up resources and unregistering event ...

  10. Learning-Python【8】:Python字符编码

    1.内存和硬盘都是用来存储的 内存:速度快 硬盘:永久保存 2.文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就可以启动一个进程,是在内存中的,所以在编辑器编写的 ...