poj 2411 Mondriaan's Dream 【dp】
题目: id=2411" target="_blank">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;
else
i++;
}//否则的话竖放
}
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's Dream 【dp】的更多相关文章
- POJ 2411 Mondriaan's Dream (dp + 减少国家)
链接:http://poj.org/problem?id=2411 题意:题目描写叙述:用1*2 的矩形通过组合拼成大矩形.求拼成指定的大矩形有几种拼法. 參考博客:http://blog.csdn. ...
- POJ 2411 Mondriaan's Dream
状压DP Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 9938 Accepted: 575 ...
- POJ 2411 Mondriaan'sDream(状压DP)
题目大意:一个矩阵,只能放1*2的木块,问将这个矩阵完全覆盖的不同放法有多少种. 解析:如果是横着的就定义11,如果竖着的定义为竖着的01,这样按行dp只需要考虑两件事儿,当前行&上一行,是不 ...
- poj 2411 Mondriaan's Dream_状态压缩dp
题意:给我们1*2的骨牌,问我们一个n*m的棋盘有多少种放满的方案. 思路: 状态压缩不懂看,http://blog.csdn.net/neng18/article/details/18425765 ...
- 状压DP POJ 2411 Mondriaan'sDream
题目传送门 /* 题意:一个h*w的矩阵(1<=h,w<=11),只能放1*2的模块,问完全覆盖的不同放发有多少种? 状态压缩DP第一道:dp[i][j] 代表第i行的j状态下的种数(状态 ...
- Kattis - honey【DP】
Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
- HDOJ 1501 Zipper 【DP】【DFS+剪枝】
HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- HDOJ 1257 最少拦截系统 【DP】
HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
随机推荐
- 关于memcpy和memmove的一点说明
今天看到书上降到memcpy和memmove的区别才突然发现原来两者之间有如此区别,以前只知道这两个函数是 实现同样的功能,没有接触到其不同. memcpy和memmove在MSDN的定义如下: 从两 ...
- ubuntu Linux离线安装软件包
ubuntu Linux离线安装软件包 http://www.myir-tech.com/bbs/thread-337-1-1.html(出处: 米尔科技论坛) 方法一 在可上网的ubuntu电脑上, ...
- Eclipse选中变量名,相同变量都变色显示
Eclipse选中变量名,相同变量都变色显示 java文件的设置"Window"-"preferences"-"Java"-"Ed ...
- C#中如何只保留小数点后面两位?
string.format("%.4f",1/3) 1.Math.Round(0.333333,2);//按照四舍五入的国际标准2. double dbdata=0.335333; ...
- Hacker(五)----黑客专用通道--->端口
计算机中,端口是计算机与外部进行通信交流的出口.计算机本身携带的物理端口(键盘.鼠标.显示器等输入/输出接口)已经无法满足网络通信的要求,因此TCP/IP协议就引入了一种称为Socket的应用程序接口 ...
- CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)(转载)
在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾斜.移动这四种类型的变形处理,本文将对此做详细介绍. 一.旋转 rotate 用法:transform: rotate(45 ...
- css系列教程--margin padding column(完结)
margin/margin-left/margin-right/margin-top/margin-bottom设置边距属性margin:0;--所有外边距0margin:0 1px;--margin ...
- 基类的参考Expression能传一个lambda表达式
using System;using System.Collections.Generic;using System.Data.Entity.Infrastructure;using System.L ...
- ORACLE OCP认证
基本情况介绍 Oracle产品非常多,这里说的是Oracle数据库认证体系. Oracle数据库认证体系包括3层,分别是OCA(助理),OCP(专家),OCM(大师) 一般情况下,需一级一级认证,也就 ...
- [Linked List]Copy List with Random Pointer
Total Accepted: 53943 Total Submissions: 209664 Difficulty: Hard A linked list is given such that ea ...