题目链接:QAQ

大致题意:有一个m行n列的矩阵,用1*2的骨牌(可横放或竖放)完全覆盖,骨牌不能重叠,有多少种不同的覆盖的方法?

Solution:

\(n,m\le11\),肯定是不能暴力的,又类似棋盘问题,一下就能想到状压dp

对于每一列(或每一行)的状态用二进制表示,0表示放了,1表示没放,在转换回十进制存储。

然后枚举一列的所有状态,看它可以转移到哪些状态,然后统计答案就行了。

最后应该输出f[n+1][0],而不是f[n][n]。本题需要long long。

Code:

#include<cstdio>
#include<cstring>
#define N 10001
#define ll long long
using namespace std;
int n,m;
ll dp[15][2051];
int a[15],b[15],c[2051][2051];
void dfs(int x,int state){
if(x==m+1){
int k=0;
for(int i=1;i<=m;i++) k=(k<<1)+b[i];
c[state][k]=1;
return ;
}
if(!a[x]){
b[x]=1;
dfs(x+1,state);
if(!a[x+1]&&x+1<=m){
b[x]=b[x+1]=0;
dfs(x+2,state);
}
}else b[x]=0,dfs(x+1,state);
}
signed main(){
begin:
scanf("%d%d",&n,&m);
if(n==0&&m==0) return 0;
memset(c,0,sizeof(c));
memset(dp,0,sizeof(dp));
int num=(1<<m)-1;
for(int i=0;i<=num;i++){
int k=i;
for(int j=m;j;j--) a[j]=k%2,k>>=1;
dfs(1,i);
}dp[1][0]=1;
for(int k=1;k<=n;k++)
for(int i=0;i<=num;i++)
for(int j=0;j<=num;j++)
dp[k+1][j]=dp[k+1][j]+(c[i][j]*dp[k][i]);
printf("%lld\n",dp[n+1][0]);
goto begin;
}

ZOJ1100 Mondriaan's Dream的更多相关文章

  1. POJ 题目2411 Mondriaan's Dream(状压DP)

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 13519   Accepted: 787 ...

  2. HDU 1400 (POJ 2411 ZOJ 1100)Mondriaan's Dream(DP + 状态压缩)

    Mondriaan's Dream Problem Description Squares and rectangles fascinated the famous Dutch painter Pie ...

  3. POJ2411 Mondriaan's Dream(状态压缩)

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 15295   Accepted: 882 ...

  4. POJ 2411 Mondriaan's Dream -- 状压DP

    题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过 ...

  5. POJ2411 铺地砖 Mondriaan's Dream

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 15962   Accepted: 923 ...

  6. [poj P2411] Mondriaan's Dream

    [poj P2411] Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 18023   A ...

  7. POJ 2411 Mondriaan's Dream 插头dp

    题目链接: http://poj.org/problem?id=2411 Mondriaan's Dream Time Limit: 3000MSMemory Limit: 65536K 问题描述 S ...

  8. 【POJ2411】Mondriaan's Dream(轮廓线DP)

    [POJ2411]Mondriaan's Dream(轮廓线DP) 题面 Vjudge 题解 这题我会大力状压!!! 时间复杂度大概是\(O(2^{2n}n^2)\),设\(f[i][S]\)表示当前 ...

  9. poj2411 Mondriaan's Dream【状压DP】

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 20822   Accepted: 117 ...

随机推荐

  1. chrome调试如何禁用浏览器缓存

    0.写在前面的话 遇到过很多很多次,修改了页面代码,但是程序始终没有按照设想的方向走,有时候折腾了几个小时,发现问题最后却是莫名其妙恢复的.后来进一步调试发现,自己已经修改了如js代码,但是前端在载入 ...

  2. C语言各种数据类型取值范围

    速查表: char -128 ~ +127 1Byte -2^7 ~ 2^7-1 unsigned char 0 ~ 255 1Byte 0 ~ 2^8-1 short -32767 ~ + 3276 ...

  3. SonarQube6.7.4安装部署

    1.准备工作 https://www.sonarqube.org Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具.比如p ...

  4. Luogu P3227 [HNOI2013]切糕

    %%ZZKdalao上课讲的题目,才知道网络流的这种玄学建模 我们先想一想,如果没有D的限制,那么想当于再每一根纵轴上选一个权值最小的点再加起来 我们对应在网络流上就是每一根纵轴上的点向它下方的点用权 ...

  5. POJ 1988&&2236

    并查集,如果只是朴素的路径压缩,那么也就是一句话的事情. 但是,一般都没有这种仁慈的裸题(假的,多了去了) 1988:带权并查集,贼鸡儿像Luogu的那道杨威利的并查集(好像是叫银河英雄传说) 开两个 ...

  6. STM32---定时器的ETR功能

    定时器的ETR功能 在使用定时器的时候,在引脚复用功能中看到了TIM2_CH1_ETR,这个ETR是什么意思呢? 答:TIM2_CH1_ETR表示两个功能选一个,分别是TIM2_CH1和TIM2_ET ...

  7. dotnet core webapi 发布部署到docker的步骤

    1. 创建web api项目,编译并测试成功 2. 在项目的根目录添加Dockerfile文件,注意:Dockerfile文件名区分大小写 文件内容如下 # 基于microsoft/dotnet:la ...

  8. python编码你需要知道的编码风格

    此时你已经可以写一些更长更复杂的 Python 程序,是时候讨论一下 编码风格 了.大多数语言可以写(或者更明白的说, 格式化 )作几种不同的风格.有些比其它的更好读.让你的代码对别人更易读是个好想法 ...

  9. 记录Jenkins+gitlab+maven

    摘要 昨天抽空将jenkins+gitlab(git)+maven整合了一下,再次记录一下以防下次再去查找省的麻烦. git.maven.java配置 启动jenkins之后进入系统管理里面的Glob ...

  10. 在Mac系统下配置PHP运行环境

    概述 Mac系统对于PHP运行非常友好,我们只需要进行简单的配置便可以开始进行使用,本篇文章将一步一步地介绍Apache.PHP和MySQL的安装与配置,为开始进行开发铺好路 Apache 启动Apa ...