NC51189 Mondriaan’s Dream

题意:

n * m的矩阵,用1 * 2和2 * 1的砖快密铺,问多少种方法:

题解:

方法1:
我们现在规定砖头的竖放的上部分为1,砖头的横放或者是竖放的下部分为0

我们每两层进行分析,分析01的关系
我们设上层为k,下层为j
因为竖砖上为1下为0,所以上下两层&的结果必然都是0,j&k = = 0,
且j|k中连续的0均为偶数,因为竖砖和横砖的组合只有两种情况如下图:
蓝色字为两行或的结果,或的结果中0只能是连续偶数个出现,不可能连续奇数个出现

方法二:
我们用01表示这个地方放不放砖
第i行只与第i-1行相关
枚举第i-1行的每个状态,就可以推出第i行的状态
如果第i-1行的某处没放,那么第i行这个位置必须放竖砖,所以对上一行状态按位取反之后的1的位置就是放置了竖方块的状态。
然后枚举这行其他点的位置,记录答案
这个思路很常规,但也很妙

代码:

#include<bits/stdc++.h>
using namespace std;typedef long long LL;int n, m;
int const N = 1e4 + 10;
LL f[20][N];
int st[N];
vector<int> state[N];int main() {while (cin >> n >> m && n && m) {// 初始化memset(f, 0, sizeof f);f[0][0] = 1;for (int i = 0; i < 1 << n; ++i) state[i].clear();// 预处理stfor (int i = 0; i < 1 << n; i ++ ) {int cnt = 0;st[i] = true;for (int j = 0; j < n; j ++ )if (i >> j & 1) {//如果第j位是1 ,统计之前连续0的数量奇偶性 if (cnt & 1) st[i] = false;cnt = 0;}else cnt ++ ;//如果是第j位是0,记录连续0的数量 if (cnt & 1) st[i] = false;}// 预处理statefor (int i = 0; i < 1 << n; ++i) {for (int j = 0; j < 1 << n; ++j) {if ((i & j) == 0 && st[i | j]) state[i].push_back(j);}}// dp转移for (int i = 1; i <= m; ++i) {for (int j = 0; j < 1 << n; ++j) {for (int k = 0; k < state[j].size(); ++k) {  // 获得所有的合法方案f[i][j] += f[i - 1][state[j][k]];}}}printf("%lld\n", f[m][0]);}return 0;
}
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long ll;
int n,m;
ll add;
ll dp[2][1<<12];
void dfs(int i,int s,int cur)
{if(cur==m) {dp[i][s]+=add;return;}dfs(i,s,cur+1);if(cur<m-1 && !(s&(1<<cur)) && !(s&1<<(cur+1)) )dfs(i,s|(1<<cur)|1<<(cur+1),cur+2);
}
int main()
{while(scanf("%d%d",&n,&m),n+m){if(n*m%2) {printf("0\n");continue;}int rt=(1<<m)-1;add=1;memset(dp,0,sizeof(dp));dfs(0,0,0);for(int i=1;i<n;i++)for(int j=0;j<=rt;j++)if(dp[(i-1)%2][j]){add=dp[(i-1)%2][j];dfs(i%2,~j&rt,0);} printf("%I64d\n",dp[(n-1)%2][rt]);}return 0;
}

NC51189 Mondriaan‘s Dream相关推荐

  1. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  2. Mondriaan's Dream

    题目链接:http://poj.org/problem?id=2411 题目: Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K To ...

  3. openjudge Mondriaan's Dream

    1413:Mondriaan's Dream 查看 提交 统计 提问 总时间限制:  3000ms  内存限制:  65536kB 描述 Squares and rectangles fascinat ...

  4. Mondriaan‘s Dream(状态压缩dp)

    问题 S: Mondriaan's Dream 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 [提交] [状态] [讨论版] [命题人:admin] 题目描述 Squa ...

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

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

  6. POJ 2411 Mondriaan's Dream [经典状态压缩dp]

    题意:略. 思路:这一题开始做的时候完全没有思路,便去看了别人的题解. 首先,对于这个题目解法想有一个初步的了解,请看这里:http://www.2cto.com/kf/201208/146894.h ...

  7. POJ - 2411 Mondriaan's Dream(状压dp)

    题目链接:点击查看 题目大意:铺瓷砖 题目分析:经典之经典的状态压缩动态规划,具体的懒得说了,怠惰ing..一个月之前写的代码,还好当时注释做的好,现在稍微一看就能立马理解,码到博客上存着吧,三种方法 ...

  8. POJ 2411 Mondriaan's Dream

    题意:用1*2的瓷砖拼出m*n的矩形.问有多少种拼法. 解法:设d[i][j]表示第i行状态为j的情况下,最多能有多少种拼法,对于状态j,1表示为竖着放置的瓷砖且它横跨i和i+1两行,其余皆用0表示. ...

  9. POJ 2411 Mondriaan's Dream(状态压缩DP)

    题目链接 早就见过这个题,开始以为有公式的,推了几次没推出,后来知道这个题是状态压缩DP.最近开始看状态压缩,本想试着解出来,但是这个比那个牛吃草复杂多了...位运算还是不是很熟练,这个题的解题报告有 ...

最新文章

  1. 2020年华为鲲鹏产业体系研究深度报告
  2. 信号与系统—傅里叶级数
  3. linux设置汉语输入法,在Deepin系统下使用韩语(韩文)输入法的方法
  4. win7、10无法修改mac地址_教一招如何修改MAC地址
  5. Python之函数传参
  6. 利用灵雀云免费主机做反向ssh端口转发,实现内网服务器的外网访问_20160107_七侠镇莫小贝
  7. php手册chm打开空白
  8. Hessian矩阵以及在血管增强中的应用—OpenCV实现
  9. 利用微信搜索抓取公众号文章(转载)
  10. Tourists——圆方树
  11. 一个服务器放多个网站seo,服务器建立多个网站 同一IP对SEO有影响吗
  12. pyspark steaming 连接kafka数据实时处理(也可以对接flume+kafka+spark)
  13. 最常用的26句生活用语
  14. OpenCV C++案例实战六《绿幕视频背景替换》
  15. 为什么short类型取值范围为-32768~32767
  16. Win10 OneNote 一直卡的登录界面
  17. SQLServer的链接服务器
  18. xpsql.cpp: 错误 5 来自 CreateProcess
  19. matlab 非线性规划如何看是否可行解,[MATLAB数学相关] linprog解线性规划问题无可行解,但lindo能解出来...
  20. 前端:页面快速定位和返回顶部(锚点)

热门文章

  1. 那些上海滩的金融传奇,或许都开始于一份PPT
  2. 掌握神经网络,入门深度学习
  3. 最多金的编程语言Top10:Python第3,R第10,你猜第1是谁?
  4. 数据挖掘算法之决策树算法总结
  5. java 抽象类与接口区别是什么_JAVA中抽象类与接口的区别,分别在什么情况下使用它们...
  6. mysql isam 食物_MySQL常用存储引擎之MyISAM
  7. abb限位开关已打开drv1_广告雕刻机限位开关触发
  8. linux tomcat8 启动慢,Linux系统下Tomcat8启动速度很慢的解决方法
  9. idea 一直在build_让web开发部署提速 8 倍的一款 IDEA 插件,你有在用?
  10. java 实现 指派_TAP任务指派问题的汇编实现