题目:poj 2411 Mondriaan's Dream

题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案。

分析:这是一个比較经典的题目。网上各种牛B写法一大堆。题解也是

我们能够定义状态:dp【i】【st】:在第 i 行状态为 st 的时候的最慷慨案数、

然后转移方程:dp【i】【st】 = sum (dp【i-1】【ss】)

即全部的当前行都是由上一行合法的状态转移而来。

而状态的合法性由两种铺法得到。第一种横放。注意要求前一行全满。然后竖放,上一行为空。能够留空。

AC代码:

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const long long N = 15;
long long dp[N][1<<N];
long long ans[N][N];
long long n,m;
bool solve(long long st)
{long long tmp=0;for(long long i=0; i<m; i++){if(st&(1<<i))tmp++;else{if(tmp%2)return false;tmp=0;}}if(tmp%2)return false;return true;
}
bool cmp(long long st,long long up)
{for(long long i=0; i<m; i++){if(st&(1<<i)){if(up&(1<<i)){if(i==m-1 || !(st&(1<<(i+1))) || !(up&(1<<(i+1))))return false;elsei++;}//否则的话竖放}else{if(!(up&(1<<i)))return false;}}return true;
}
int main()
{memset(ans,0,sizeof(ans));while(~scanf("%lld%lld",&n,&m)){if(n==0 && m==0)break;if((m*n)%2){printf("0\n");continue;}if(m>n)swap(m,n);if(ans[n][m]){printf("%lld\n",ans[n][m]);continue;}memset(dp,0,sizeof(dp));long long len = 1<<m;for(long long i=0; i<len; i++){if(solve(i))dp[1][i]=1;}for(long long i=2; i<=n; i++){for(long long st=0; st<len; st++) //当前行{for(long long k = 0; k<len; k++) //上一行{if(cmp(st,k))dp[i][st]+=dp[i-1][k];}}}printf("%lld\n",dp[n][len-1]);ans[n][m] = dp[n][len-1];}return 0;
}

poj 2411 Mondriaan#39;s Dream 【dp】相关推荐

  1. POJ 2411 Mondriaan#39;s Dream (dp + 减少国家)

    链接:http://poj.org/problem?id=2411 题意:题目描写叙述:用1*2 的矩形通过组合拼成大矩形.求拼成指定的大矩形有几种拼法. 參考博客:http://blog.csdn. ...

  2. Hrbust 1837 Dream【dp】

    Dream Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 13(8 users) Total Accepted: 3(3 users) ...

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

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

  4. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  5. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  6. Bailian2760 数字三角形【DP】

    2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...

  7. NUC1131 Triangle【DP】

    Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...

  8. LeetCode:完全平方数【279】【DP】

    LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...

  9. 【DP】序列 题解

    [DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...

最新文章

  1. JAVA虚拟机关闭钩子(Shutdown Hook)
  2. mpvue+vant app搭建微信小程序
  3. Gartner:到2020年人工智能将创造出230万个工作岗位
  4. 逻辑卷、物理卷、卷组相关操作
  5. CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板
  6. SICP学习笔记(1.1.4~1.1.5)
  7. [PHP] 用JSON 传输图片源码
  8. 同花顺2020年净利润17亿元增长近一倍,DAU超1400万
  9. toString(radix)
  10. java8安装_安装jenkins
  11. 从0成为Facebook广告高手系列教程
  12. C/C++ inline 函数
  13. mtkwin10驱动_MTK手机刷机驱动下载|MTK通用USB刷机驱动 Win7/Win10 自动安装版 下载_当下软件园_软件下载...
  14. Mybatis源码阅读之一——工厂模式与SqlSessionFactory
  15. php 网站地图 在线生成 代码,WordPress免插件生成完整站点地图(sitemap.xml)的php代码...
  16. 【斯坦福大学公开课】Stanford NLP: Lesson 1 Intro
  17. python 配对t检验_配对t检验的python实现
  18. 地震观测仪器的历史和发展趋势(二)
  19. Dubbo 3.0新特性记录
  20. 北航计算机学院直博多少年,北航硕博连读需要几年

热门文章

  1. 用jquery验证用户名是否有效或重复
  2. 《智慧书》格言241-250
  3. Maximum execution time of 30 seconds exceeded解决办法
  4. linux系统下对网站实施负载均衡+高可用集群需要考虑的几点
  5. spring中间scope详细解释
  6. ubuntu 16 下安装 Ubuntu Make
  7. [Leetcode]100. Same Tree -David_Lin
  8. 围观阿里云最会赚钱的人!价值2万元邀请码不限量发送
  9. 静态方法mock 和verify
  10. 为什么servlet-nameaction/servlet-name要这么写