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 ...
随机推荐
- 简单叨叨bootstrap按钮无限层级下拉菜单的实现
0.写在前面的话 最近看书都懈怠了,又正值新项目,虽说并不是忙得不可开交,好吧我老实交待,我就是偷懒了其实,博客也没更.言归正传,对于前端的不熟悉现在确实是个让我头疼的事情,以至于一些功能要在网络上漫 ...
- Feeling_2018_5_22
“我打你,你会走吗?” “不会!!” “我骂你,你会走吗?” “不会!!” “那我不爱你了,你会走吗?” “会.”
- Sign in with the app-specific password you generated. If you forgot the app-specific password or need to create a new one, go to appleid.apple.com
iOS打包报错信息如下:Sign in with the app-specific password you generated. If you forgot the app-specific pas ...
- 关于新版SDK报错You need to use a Theme.AppCompat theme的两种解决办法 - 转
android的一个小问题: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme ( ...
- XSS Challenges练习及解答
一个偶然的机会在知道创宇的技能表里看到了一个练习XSS的网站http://xss-quiz.int21h.jp,正好想研究这个,于是试着做了一下. 第一.二题是最简单的,直接在搜索框中输入以下代码就成 ...
- 20155226 《网络对抗》Exp 8 Web基础
20155226 <网络对抗>Exp 8 Web基础 实践内容 1.Web前端HTML 配置环境 正常安装.启动Apache 安装:sudo apt-get install apache2 ...
- python3获取主机名、主机IP
python3可以通过socket模块获取主机名及主机IP 代码如下: *********************************************************** 学习永远 ...
- python常用算法实现
排序是计算机语言需要实现的基本算法之一,有序的数据结构会带来效率上的极大提升. 1.插入排序 插入排序默认当前被插入的序列是有序的,新元素插入到应该插入的位置,使得新序列仍然有序. def inser ...
- C语言中指针占据内存空间问题
以前一直有个疑问,指向不同类型的指针到底占用的内存空间是多大呢? 这个问题我多次问过老师,老师的答案是"指向不同类型的指针占据的内存空间大小不同",我一直很之一这个答案,今天我就做 ...
- 微信小程序初体验与DEMO分享
前言 前一段时间微信公布小程序,瞬间引来了大量的关注.博主的公司也将其定为目标之一,遂派本菜为先头兵(踩坑侠). 这次开发了一个比较完整的DEMO,模仿自某个APP首页,由于保护隐私的目的我把数据拷贝 ...