Mondriaan's Dream

时间:2022-09-18 20:44:21

poj2411:http://poj.org/problem?id=2411

题意:给你1*2的方块,让你把n*m的房间填好有多少种方式。

题解:状压dp。这一题,我是不会做了,看懂了题解之后,震惊了。这Dp只要找对状态方程,简直就是一种艺术啊。我深深的喜欢上DP了。好了。讲讲这一题吧。首先是状态方程f[i][j]表示第i行第j个状态所得的方案数。j有3种形式,如果出现1,那么1表示这一行会放一个竖的,0表示不放,00表示横着放一块。并且用f[i][0]表示第i行什么都不放。好了,然后是枚举状态了。对于本行的 状态s1和上一行状态上s2来说,如果s1&s2>0的话,说明肯定存在一位,在这一位上上一行竖着放着一个,这一行应该是不放,但是这一位放了一个,显然这样的状态是不合理的。然后没有这样的状况的话,就要检查剩余的0是否两个两个连续,如果有多余0不是一对说明,这两行在这一位是空着的,这样也是不合理,因为这一位的两个空格,下一行是没有办补充上来的。这里最巧妙的就是用f[i][0]表示什么都不放,那么最终的答案就是f[n+1][0],而且初始化的话f[1][0]=1,这也是显然的。有了这些还有一些特判,如果n*m%2==1说明面积是奇数,但是面积不可能是奇数,所以不可能拼完。还有一个重要的地方就是(n<m),swap(n,m);这里还没有弄懂,但是不交换的话,答案就不对。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
long long f[][];
bool judge(int s1,int s2){
if(s1&s2)return ;
s1|=s2;
for(int i=;i<m;){
int j=(s1&(<<i));
if(j==){
if(i==m-)return ;
else if((s1&(<<(i+)))!=)return ;
i+=;
}
else i++;
}
return ;
}
int main(){
while(~scanf("%d%d",&n,&m)&&n){
memset(f,,sizeof(f));
if(n*m&){
printf("0\n");
continue;
}
f[][]=;
if(n<m)swap(n,m);
for(int i=;i<=n;i++){
for(int j=;j<(<<m);j++){
for(int k=;k<(<<m);k++){
if(judge(j,k)){
f[i+][j]+=f[i][k];
}
}
}
}
printf("%I64d\n",f[n+][]);
}
}

Mondriaan's Dream的更多相关文章

  1. POJ 题目2411 Mondriaan&&num;39&semi;s Dream(状压DP)

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

  2. HDU 1400 (POJ 2411 ZOJ 1100)Mondriaan&&num;39&semi;s Dream(DP &plus; 状态压缩)

    Mondriaan's Dream Problem Description Squares and rectangles fascinated the famous Dutch painter Pie ...

  3. POJ2411 Mondriaan&&num;39&semi;s Dream(状态压缩)

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

  4. POJ 2411 Mondriaan&&num;39&semi;s Dream -- 状压DP

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

  5. POJ2411 铺地砖 Mondriaan&&num;39&semi;s Dream

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

  6. &lbrack;poj P2411&rsqb; Mondriaan&&num;39&semi;s Dream

    [poj P2411] Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 18023   A ...

  7. POJ 2411 Mondriaan&&num;39&semi;s Dream 插头dp

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

  8. 【POJ2411】Mondriaan&&num;39&semi;s Dream(轮廓线DP)

    [POJ2411]Mondriaan's Dream(轮廓线DP) 题面 Vjudge 题解 这题我会大力状压!!! 时间复杂度大概是\(O(2^{2n}n^2)\),设\(f[i][S]\)表示当前 ...

  9. poj2411 Mondriaan&&num;39&semi;s Dream【状压DP】

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

  10. POJ - 2411 Mondriaan&&num;39&semi;s Dream(轮廓线dp)

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

随机推荐

  1. MySQL int&lpar;11&rpar;及int&lpar;M&rpar;解析

    默认创建int类型的字段,SHOW CREATE TABLE table_name或DESC table_name常常可以看到其默认情况为int(11). 这个int(M)很多时候都会被误解为最大范围 ...

  2. linq的简单查询 和 组合查询

    以Car表和Brand表为例,其中Car表的Brand是Brand表的Brandcode. (1)建立两表的linq(一定要做好主外键关系,),创建之后不用修改,如要添加,另建文件. (2)Car表的 ...

  3. 生成HTMLTestRunner测试报告的操作步骤——Python&plus;selenium自动化

    HTMLTestRunner是Python标准库的unittest模块的一个扩展,具体操作如下 1.安装 环境:Window8 步骤:1)http://tungwaiyip.info/software ...

  4. 要缩小通过两个触摸点的观点&lpar;iOS&rpar;

    于AppDelegate.m档,创建一个视图控制器 #import "MAYAppDelegate.h" #import "MAYViewController.h&quo ...

  5. HDU2066:一个人的旅行(Dijkstra)

    Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...

  6. Assert中的静态方法

    junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类. 1.assertTrue/False([String message,]boolean cond ...

  7. TensorFlow实践笔记(一):数据读取

    本文整理了TensorFlow中的数据读取方法,在TensorFlow中主要有三种方法读取数据: Feeding:由Python提供数据. Preloaded data:预加载数据. Reading ...

  8. 读取Excel的部分问题

    1.office分很多版本,导致Excel连接字符串不同. 2.是否有标题头的问题(在连接字符串中设置) 3.Excel本身删除分数据删除和表格结构删除.普通delete只能删除数据, 还是能读取到表 ...

  9. Hive之分区(Partitions)和桶(Buckets)

    转自:http://www.aahyhaa.com/archives/316 hive引入partition和bucket的概念,中文翻译分别为分区和桶(我觉的不是很合适,但是网上基本都是这么翻译,暂 ...

  10. selenium webdriver处理HTML5 的视频播放

    import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.sele ...