ZOJ1100 Mondriaan's Dream
题目链接: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的更多相关文章
- POJ 题目2411 Mondriaan's Dream(状压DP)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 13519 Accepted: 787 ...
- HDU 1400 (POJ 2411 ZOJ 1100)Mondriaan's Dream(DP + 状态压缩)
Mondriaan's Dream Problem Description Squares and rectangles fascinated the famous Dutch painter Pie ...
- POJ2411 Mondriaan's Dream(状态压缩)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 15295 Accepted: 882 ...
- POJ 2411 Mondriaan's Dream -- 状压DP
题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过 ...
- POJ2411 铺地砖 Mondriaan's Dream
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 15962 Accepted: 923 ...
- [poj P2411] Mondriaan's Dream
[poj P2411] Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 18023 A ...
- POJ 2411 Mondriaan's Dream 插头dp
题目链接: http://poj.org/problem?id=2411 Mondriaan's Dream Time Limit: 3000MSMemory Limit: 65536K 问题描述 S ...
- 【POJ2411】Mondriaan's Dream(轮廓线DP)
[POJ2411]Mondriaan's Dream(轮廓线DP) 题面 Vjudge 题解 这题我会大力状压!!! 时间复杂度大概是\(O(2^{2n}n^2)\),设\(f[i][S]\)表示当前 ...
- poj2411 Mondriaan's Dream【状压DP】
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 20822 Accepted: 117 ...
随机推荐
- 页签中加按钮 odoo里面
<notebook> <page string="订"> <field name="line_id" > <tree ...
- EF Core中如何取消跟踪DbContext中所有被跟踪的实体
首先定义一个DbContext的扩展类DbContextDetachAllExtension,其中包含一个DbContext的扩展方法DetachAll,用来取消跟踪DbContext中所有被跟踪的实 ...
- 详解大数据采集引擎之Sqoop&采集oracle数据库中的数据
一.Sqoop的简介: Sqoop是一个数据采集引擎/数据交换引擎,采集关系型数据库(RDBMS)中的数据,主要用于在RDBMS与HDFS/Hive/HBase之间进行数据传递,可以通过sqoop i ...
- go语言之行--接口(interface)、反射(reflect)详解
一.interface简介 interface(接口)是golang最重要的特性之一,Interface类型可以定义一组方法,但是这些不需要实现.并且interface不能包含任何变量. 简单的说: ...
- 20155216 Exp4 恶意代码分析
20155216 Exp4 恶意代码分析 实践内容 使用schtasks指令监控系统运行 先在C盘目录下建立一个netstatlog.bat文件和netstatlog.txt文件,将记录的联网结果格式 ...
- 从字节码层面,解析 Java 布尔型的实现原理
最近在系统回顾学习 Java 虚拟机方面的知识,其中想到一个很有意思的问题:布尔型在虚拟机中到底是什么类型? 要想解答这个问题,我们看 JDK 的源码是无法解决源码的,我们必须深入到 class 文件 ...
- 调用wx.request接口时需要注意的几个问题
写在前面 之前写了一篇<微信小程序实现各种特效实例>,上次的小程序的项目我负责大部分前端后台接口的对接,然后学长帮我改了一些问题.总的来说,收获了不少吧! 现在项目已经完成,还是要陆陆续续 ...
- 浅谈android Service和BroadCastReceiver
1.题记 Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序. 广播接收者(BroadcastRece ...
- Scrum Meeting NO.1
Scrum Meeting No.1 1.会议内容 不出所料地,组员们都在忙着写编译.编译大作业的进度已经接近尾声,码农们已经磨刀霍霍向软工-- 在上一周,bugphobia和我们组决定共同使用一套后 ...
- 《Linux内核分析》第四周:扒开系统调用的三层皮
杨舒雯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 一. 用户 ...