$11*11$格子板上铺$1*2$地砖方案。以前做过?权当复习算了,毕竟以前学都是浅尝辄止的。。常规题,注意两个条件:上一行铺竖着的则这一行同一位一定要铺上竖的,这一行单独铺横的要求枚举集合中出现连续偶数个的1,预处理一下即可。注意数据及时reset。

  #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define dbg(x) cerr<<#x<<" = "<<x<<endl
using namespace std;
typedef long long ll;
template<typename T>inline char MIN(T&A,T B){return A>B?A=B,:;}
template<typename T>inline char MAX(T&A,T B){return A<B?A=B,:;}
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=;
ll f[N][<<N-];
int n,m,ful,g[<<N-]; int main(){//freopen("test.in","r",stdin);//freopen("test.out","w",stdout);
for(register int i=;i<(<<);++i){
int cnt=;
for(register int j=;j<;++j){
if(!((<<j)&i)){if(cnt&)break;cnt=;}
else ++cnt;
}
if(!(cnt&))g[i]=;
}
while(read(n),read(m),n){
if((n*m)&){printf("0\n");continue;}
f[][ful]=;ful=(<<m)-;f[][ful]=;
for(register int i=;i<=n;++i){
for(register int j=;j<=ful;++j){
f[i][j]=;
for(register int k=;k<=ful;++k)if(((j|k)==ful)&&(g[j&k])){
f[i][j]+=f[i-][k];
}
}
}
printf("%lld\n",f[n][ful]);
}
return ;
}

UPD:以前个人理解这个$0/1$状态设计有问题。应当是$f[i][S]$表示的是当前推导了第$i$行,状态$S$,对应二进制位$1$的表示这一格填了,$0$表示还没填,有$0$的这种情况下是留作下一行使用的(也就是可以由现在没填的情况推向下一行同一列填好的情况),说“表示放下竖着摆的砖的上半部分”的说法是不确切的。这样,用上述正确的状态定义就可以方便解决绝大多数铺砖类题目。再比如:

如果有的格子不准铺,有多少种铺法?最多铺多少个?用上面的定义,可以在当前状态$S$下使用DFS推导出下一行的所有合法方案并更新,不能铺的地方也用$1$来表示。当然,也可以使用轮廓线DP来推,但是好像会被dfs吊打。。但是最好不要用暴力枚举来推,有大量冗余状态。

详细可以见这道题目题解。poj1038 Bugs Integrated, Inc.[状压DP]

poj2411 Mondriaan's Dream[简单状压dp]的更多相关文章

  1. [Poj2411]Mondriaan's Dream(状压dp)(插头dp)

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

  2. POJ2411 Mondriaan's Dream 【状压dp】

    没错,这道题又是我从LZL里的博客里剽过来的,他的题真不错,真香. 题目链接:http://poj.org/problem?id=2411 题目大意:给一个n * m的矩形, 要求用 1 * 2的小方 ...

  3. poj2411 Mondriaan's Dream【状压DP】

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

  4. ☆ [POJ2411] Mondriaan's Dream 「状压DP」

    传送门 >Here< 题意:用1*2的砖块铺满n*m的地板有几种方案 思路分析 状压经典题! 我们以$f[i][j]$作为状态,表示第i行之前全部填完并且第i行状态为j(状压)时的方案数. ...

  5. poj2411 Mondriaan's Dream (状压dp+多米诺骨牌问题)

    这道题的解析这个博客写得很好 https://blog.csdn.net/shiwei408/article/details/8821853 大致意思就是我们可以只处理两行之间的关系,然后通过这两个关 ...

  6. POJ 题目2411 Mondriaan's Dream(状压DP)

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

  7. POJ 2411 Mondriaan's Dream 【状压Dp】 By cellur925

    题目传送门 这道题暑假做的时候太模糊了,以前的那篇题解大家就别看了==.今天再复习状压感觉自己当时在写些什么鸭.... 题目大意:给你一个\(n\)*\(m\)的棋盘和许多\(1*2\)的骨牌,骨牌可 ...

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

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

  9. POJ 2411 Mondriaan's Dream/[二进制状压DP]

    题目链接[http://poj.org/problem?id=2411] 题意:给出一个h*w的矩形1<=h,w<=11.用1*2和2*1的小矩形去填满这个h*w的矩形,问有多少种方法? ...

随机推荐

  1. AJAX实现弹窗显示详情,全选和批量删除

    以Nation表为例,将Nation表显示在页面上,每一行数据前面加上复选框,后面加上查看详情,点击以弹窗形式显示每一行的数据,并且在表格最后一行加上全选复选框,点击选中全部数据,后面跟一个批量删除按 ...

  2. 使用CoreData存储数据

    - (void)viewDidLoad { [super viewDidLoad]; //获取模型文件的路径 NSString *path=[[NSBundle mainBundle]pathForR ...

  3. 每天一个Linux命令(51)ss命令

        ss命令用来显示处于活动状态的套接字信息.     (1)用法:     用法:  ss  [参数]  ss  [参数]  [过滤]     (2)功能:     功能:  ss是类似nets ...

  4. PHP 数字转大写

    <?php header("content-type:text/html;charset=utf-8"); function numToRmb($num){ $rmbNum ...

  5. 【Tech】mac下svn和scp使用笔记

    1.命令行从svn下载代码 mac本身自带svn,所以使用非常简单,在本地创建代码存放的文件夹,然后cd到该文件夹下,运行: svn checkout svn://ip地址/文件路径 . 然后出现要求 ...

  6. GPU的工作原理

    转:https://blog.csdn.net/p23onzq/article/details/79609629 在GPU出现以前,显卡和CPU的关系有点像“主仆”,简单地说这时的显卡就是画笔,根据各 ...

  7. CCNA 课程 六

    路由协议概述: 通过一种路由协议学习到了多个去往同一目标网络的路由,metric小的放入路由表中.metric一样,同时放进路由表. 通过多种路由协议学习到了去往同一目标网络的路由,路由协议管理距离小 ...

  8. freemarker日志实现过程分析

    freemarker有自己的log类,这是一个抽象类,具体的日志打印委托给classpath里面合适的日志jar包来执行,寻找合适日志jar的查找顺序是:Apache Log4J, Apache Av ...

  9. RabbitMQ解决分布式事务

    案例:经典案例,以目前流行点外卖的案例,用户下单后,调用订单服务,让后订单服务调用派单系统通知送外卖人员送单,这时候订单系统与派单系统采用MQ异步通讯. RabbitMQ解决分布式事务原理: 采用最终 ...

  10. 在与SQLServer建立连接时出现与网络相关的或特定于实例的错误

    标题: 连接到服务器 ------------------------------ 无法连接到 (local). ------------------------------ 其他信息: 在与 SQL ...