poj 2411 Mondriaan#39;s Dream 【dp】
题目: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】相关推荐
- POJ 2411 Mondriaan#39;s Dream (dp + 减少国家)
链接:http://poj.org/problem?id=2411 题意:题目描写叙述:用1*2 的矩形通过组合拼成大矩形.求拼成指定的大矩形有几种拼法. 參考博客:http://blog.csdn. ...
- Hrbust 1837 Dream【dp】
Dream Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 13(8 users) Total Accepted: 3(3 users) ...
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...
- POJ前面的题目算法思路【转】
1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...
- 【DP】【期望】$P1850$换教室
[DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...
- Bailian2760 数字三角形【DP】
2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...
- NUC1131 Triangle【DP】
Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...
- LeetCode:完全平方数【279】【DP】
LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...
- 【DP】序列 题解
[DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...
最新文章
- JAVA虚拟机关闭钩子(Shutdown Hook)
- mpvue+vant app搭建微信小程序
- Gartner:到2020年人工智能将创造出230万个工作岗位
- 逻辑卷、物理卷、卷组相关操作
- CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板
- SICP学习笔记(1.1.4~1.1.5)
- [PHP] 用JSON 传输图片源码
- 同花顺2020年净利润17亿元增长近一倍,DAU超1400万
- toString(radix)
- java8安装_安装jenkins
- 从0成为Facebook广告高手系列教程
- C/C++ inline 函数
- mtkwin10驱动_MTK手机刷机驱动下载|MTK通用USB刷机驱动 Win7/Win10 自动安装版 下载_当下软件园_软件下载...
- Mybatis源码阅读之一——工厂模式与SqlSessionFactory
- php 网站地图 在线生成 代码,WordPress免插件生成完整站点地图(sitemap.xml)的php代码...
- 【斯坦福大学公开课】Stanford NLP: Lesson 1 Intro
- python 配对t检验_配对t检验的python实现
- 地震观测仪器的历史和发展趋势(二)
- Dubbo 3.0新特性记录
- 北航计算机学院直博多少年,北航硕博连读需要几年
热门文章
- 用jquery验证用户名是否有效或重复
- 《智慧书》格言241-250
- Maximum execution time of 30 seconds exceeded解决办法
- linux系统下对网站实施负载均衡+高可用集群需要考虑的几点
- spring中间scope详细解释
- ubuntu 16 下安装 Ubuntu Make
- [Leetcode]100. Same Tree -David_Lin
- 围观阿里云最会赚钱的人!价值2万元邀请码不限量发送
- 静态方法mock 和verify
- 为什么servlet-nameaction/servlet-name要这么写