poj2411Mondriaan's Dream(状压)
http://poj.org/problem?id=2411
下次还是去学习下dfs的写法吧 自己乱写的好像有点乱 乱七八糟改了一通过了
以1 1 表示横着的 1 0 表示竖着的 枚举每一行的状态 再枚举前一行的状态判断是否可以同存
注意最后一行要特殊判断一下 0夹着着的1必须为偶数
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define N 3010
#define LL __int64
LL dp[][N],o[][N],k[];
int main()
{
int i,j,n,m,e,g;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==&&m==)
break;
memset(dp,,sizeof(dp));
memset(k,,sizeof(k));
memset(o,,sizeof(o));
if(n%!=&&m%!=)
{
printf("0\n");
continue;
}
o[][] = (<<m)-;
dp[][o[][]] = ;
k[] = ;
for(i = ; i <= n ; i++)
{
for(j = ; j < <<m ; j++)
{
for(g = ; g <= k[i-] ; g++)
{
LL gg = o[(i+)%][g];
int kk = ;
for(e = ; e < m ; e++)
{
if((j&(<<e))==&&(gg&(<<e))==)
break;
if((j&(<<e))!=&&(gg&(<<e))!=)
kk++;
else
if(kk%!=) break;
else kk=;
}
if(kk%==&&e==m)
dp[i][j]+=dp[i-][gg];
}
if(dp[i][j])
{
k[i]++;
o[(i+)%][k[i]] = j;
}
}
}
LL ans=;
for(i = ; i < <<m ; i++)
{
if(dp[n][i]==)
continue;
int kk=;
for(e = ; e < m ; e++)
{
if((i&(<<e))==&&(kk%)!=)
break;
if((i&(<<e))==&&(kk%)==)
kk = ;
if((i&(<<e))!=)
kk++;
}
if(kk%==&&e==m)
ans+=dp[n][i];
}
printf("%I64d\n",ans);
}
return ;
}
poj2411Mondriaan's Dream(状压)的更多相关文章
- [poj2411] Mondriaan's Dream (状压DP)
状压DP Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One nigh ...
- POJ 2411 Mondriaan's Dream -- 状压DP
题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过 ...
- Poj 2411 Mondriaan's Dream(状压DP)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Description Squares and rectangles fascina ...
- POJ 2411 Mondriaan's Dream ——状压DP 插头DP
[题目分析] 用1*2的牌铺满n*m的格子. 刚开始用到动规想写一个n*m*2^m,写了半天才知道会有重复的情况. So Sad. 然后想到数据范围这么小,爆搜好了.于是把每一种状态对应的转移都搜了出 ...
- $POJ2411\ Mondriaan's\ Dream$ 状压+轮廓线$dp$
传送门 Sol 首先状压大概是很容易想到的 一般的做法大概就是枚举每种状态然后判断转移 但是这里其实可以轮廓线dp 也就是从上到下,从左到右地放方块 假设我们现在已经放到了$(i,j)$这个位置 那么 ...
- POJ-2411 Mondriann's Dream (状压DP)
求把\(N*M(1\le N,M \le 11)\) 的棋盘分割成若干个\(1\times 2\) 的长方形,有多少种方案.例如当 \(N=2,M=4\)时,共有5种方案.当\(N=2,M=3\)时, ...
- [Poj2411]Mondriaan's Dream(状压dp)(插头dp)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 18096 Accepted: 103 ...
- poj2411 Mondriaan's Dream (轮廓线dp、状压dp)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17203 Accepted: 991 ...
- ☆ [POJ2411] Mondriaan's Dream 「状压DP」
传送门 >Here< 题意:用1*2的砖块铺满n*m的地板有几种方案 思路分析 状压经典题! 我们以$f[i][j]$作为状态,表示第i行之前全部填完并且第i行状态为j(状压)时的方案数. ...
- 状压dp Mondriaan's Dream poj2411
超经典的一道题目,实现这题的方法也有非常多种 1.利用DFS建立矩阵,然后通过高速矩阵幂得到答案(运用于min(m,n)比較小.可是max(m,n)很大的情况) 2.利用dp状压解决 第一种在我的还有 ...
随机推荐
- Map 对象
1.创建一个Map对象 var map=new Map(); 2.size属性 //给map添加一些值 map.set("name","张三"); map.se ...
- 往xml中更新节点
/* System.out.println("2323"); DocumentBuilderFactory factory = DocumentBuilderFactory.new ...
- Ant 入门
参考: Ant官网 http://ant.apache.org/ 轻量级java ee企业应用实战(李刚) Ant当前版本1.9.6 Ant基于Java 配置环境变 ...
- caffe源码阅读(1)-数据流Blob
Blob是Caffe中层之间数据流通的单位,各个layer之间的数据通过Blob传递.在看Blob源码之前,先看一下CPU和GPU内存之间的数据同步类SyncedMemory:使用GPU运算时,数据要 ...
- 《C#入门典》
这本书算是我读的第一本关于.NET的书. 上大学的时候,教我们课的老师经常给我们安利"Wrox红皮书",说这是程序员写给程序员的书,有很高的参考价值. 这本书的电子版,有1000多 ...
- 使用Class.getResource和ClassLoader.getResource方法获取文件路径
自从转投Java阵营后,一直发下Java程序的路径读取异常麻烦,因此查阅了比较多的版本内容,整合了一份自己的学习笔记.主要使用Class及通过ClassLoader来动态获取文件路径. 查阅链接如下: ...
- Django部署问题
1.Debug=True页面正常显示. 2.Debug=False,页面500错误. 3.解决500,配置setting.py,令ALLOWED_HOSTS = ['*'],可解决访问问题,但静态文件 ...
- Web前端新人笔记之CSS字体
本章内容是阅读CSS权威指南的一个小积累和随笔.新人必看,老鸟也可查看并指出不足指出以便后人阅读更好地理解.O(∩_∩)O谢谢!!!设置字体属性时样式变的最常见的用途之一:不过,尽管字体选择很重要,但 ...
- CentOS6.4 安装JDK
1.下载JDK,这里用的是jdk-7u65-linux-x64.tar.gz,请到官网上下载. 2.清除默认的JDK,yum remove java 3.解压文件 tar -xzf jdk-7u65- ...
- nuget的使用总结
使用NuGet发布自己的类库包(Library Package) from:http://blog.csdn.net/gulijiang2008/article/details/41724927 使用 ...