这道题的解析这个博客写得很好

https://blog.csdn.net/shiwei408/article/details/8821853

大致意思就是我们可以只处理两行之间的关系,然后通过这两个关系推出所有行(有点像矩阵快速幂的思想)

几个要注意的地方

(1)第0行为全1

(2)发现自己的思维习惯还是先行在状态,我自己写得时候老是写反。

(3)path的个数可能有很多,不只是1<<n,可以输入极限数据然后输出路径的数目作为数组空间大小

(4)拿小的作列

(5)这道题是人为的设置一种方式,使得二进制与骨牌是一一对应的

如果是横放,就1 1 如果是竖放就 0 如果不放就是 1

11                        1                        0

然后这里的二进制操作非常的秀,要认真学习

#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;typedef long long ll;
const int MAXN = 15;
ll dp[MAXN][2100];
int path[14000][2], p, n, m;void dfs(int l, int now, int pre)
{if(l > m) return;if(l == m){path[p][0] = pre;path[p++][1] = now;return;}dfs(l + 2, (now << 2) | 3, (pre << 2) | 3);dfs(l + 1, (now << 1) | 1, pre << 1);dfs(l + 1, now << 1, (pre << 1) | 1);
}int main()
{while(~scanf("%d%d", &n, &m) && n){memset(dp, 0, sizeof(dp));if(m > n) swap(n, m);p = 0;dfs(0, 0, 0);dp[0][(1<<m)-1] = 1;_for(i, 1, n)REP(j, 0, p)dp[i][path[j][1]] += dp[i-1][path[j][0]];printf("%lld\n", dp[n][(1<<m)-1]);}return 0;
}

转载于:https://www.cnblogs.com/sugewud/p/9819323.html

poj2411 Mondriaan's Dream (状压dp+多米诺骨牌问题)相关推荐

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

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

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

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

  3. 动态规划 —— 状压 DP

    [概述] 通常将以一个集合内的元素信息作为状态且状态总数为指数级别的动态规划称为状态压缩动态规划. 其是一类以集合信息为状态的特殊的动态规划问题,主要有传统集合动态规划与基于连通性状态压缩的动态规划两 ...

  4. 【状压DP+高精】【cofun1370】走道铺砖问题

    [cofun1370]走道铺砖问题 Description 有一个专门为装修设计方案的设计师.在某一天,他接到了一个项目,为一栋正在修建的大楼设计走道的地板铺设方案.此项目的委托人事先便进行了说明:地 ...

  5. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  6. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  7. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  8. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

  9. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

最新文章

  1. 挑战JavaScript正则表达式每日两题(2)
  2. UA MATH571B 试验设计 Quarter 2-level析因设计
  3. vue 点击倒计时 ajax 封装
  4. mingw w64 matlab,Matlab安装MinGW-w64问题解决
  5. Flutter高内聚组件怎么做?阿里闲鱼打造开源高效方案!
  6. 《C++ Primer Plus》读书笔记之七—内存模型和名称空间
  7. delphi acropdf打印多个pdf_将多个PDF文件整合成一个文件
  8. dmx512如何帧同步_同步DMX512控制器的设计详解
  9. python实现BP神经网络
  10. 新兴的计算机设备,澳洲新兴专业-计算机数控,你会心动吗?
  11. 明源地产ERP实施五步法
  12. 中央电大c 语言程序设计本科试题,中央电大本科C语言程序设计试题2013年1月.pdf...
  13. 【高等数学如何学,做题方法,期末突击】
  14. 单片机——神奇的中断嵌套实验
  15. Mac电脑 绑定阿里云企业邮箱
  16. 数据字典模板_C++ 模板元编程:一种屠龙之技
  17. 花点时间顺顺Git(上)
  18. 牛客小白月赛5 - A 无关(relationship) (容斥)
  19. [附源码]Python计算机毕业设计Django自行车租赁管理系统
  20. 华为云计算入门-计算虚拟化

热门文章

  1. 强制回收和IDisposable.Dispose方法
  2. Linux ALSA声卡驱动之六:ASoC架构中的Machine
  3. Android之网络丢包
  4. Struts 2 标签库详解
  5. java书籍_这本最适合夯实基础的Java 书籍,80% 的 Java 程序员没认真看过
  6. vue实现简单表格组件
  7. FireFox不支持cursor:hand
  8. 边缘检测的各种微分算子比较(Sobel,Robert,Prewitt,Laplacian,Canny)
  9. 机器学习(Machine Learning)深入学习(Deep Learning)资料
  10. Dart中的catchError捕获顺序