POJ 2241 Mondriaan's Dream
题意:给一块n×m的空地,用1×2的砖铺,有多少种方案。
解法:状压dp。考虑dp[i][j]表示前i - 1行都铺满时第i行的状态为j时的方案数。对于第i行,每个格子上是否有砖用0和1表示,0表示不铺砖,1表示铺砖,二进制压缩状态,枚举第i - 1行的状态j和第i行的状态k,看这两种状态是否符合实际,如果符合实际,dp[i][k] += dp[i - 1][j]。因为在看第i行时要求i - 1行都铺满,所以j状态中0的位置k都必须是1,表示放一块2×1的砖,剩下的部分如果k的位置是1,则是放了1×2的砖,所以每段1的长度必须是偶数。
我貌似判是否符合实际的地方写屎了……总之没T就好哈哈哈哈哈哈哈
还有两个剪枝是n×m如果是奇数则答案是0,因为一块砖的面积是2,另一个剪枝是选择n和m中小的作为列数,可以让状态小一些,另外将答案打表也可以减少时间,我本来想把状态之间是否符合实际也打表……后来意识到这样是错的。
还有就是int会爆……orz
代码:
- #include<stdio.h>
- #include<iostream>
- #include<algorithm>
- #include<string>
- #include<string.h>
- #include<math.h>
- #include<limits.h>
- #include<time.h>
- #include<stdlib.h>
- #include<map>
- #include<queue>
- #include<set>
- #include<stack>
- #include<vector>
- #include<iomanip>
- #define LL long long
- #define lson l, m, rt << 1
- #define rson m + 1, r, rt << 1 | 1
- using namespace std;
- int n, m;
- LL ans[15][15];
- LL dp[15][2050];
- bool judge(int x, int y)
- {
- int vis[20] = {0};
- for(int i = 0; i < m; i++)
- {
- if((x & (1 << i)) == 0)
- {
- vis[i] = 1;
- if((y & (1 << i)) == 0) return false;
- }
- }
- for(int i = 0; i < m - 1; i++)
- {
- if(vis[i] && (y & (1 << i))) continue;
- if(vis[i] && !(y & (1 << i))) return false;
- if(!vis[i] && (y & (1 << i)))
- {
- if(vis[i + 1]) return false;
- vis[i] = 1;
- vis[i + 1] = 1;
- }
- }
- if(vis[m - 1] && !(y & (1 << (m - 1)))) return false;
- if(!vis[m - 1] && (y & (1 << (m - 1)))) return false;
- return true;
- }
- LL solve()
- {
- memset(dp, 0, sizeof dp);
- dp[0][(1 << m) - 1] = 1;
- for(int i = 1; i <= n; i++)
- {
- for(int j = 0; j < (1 << m); j++)
- {
- for(int k = 0; k < (1 << m); k++)
- {
- if(judge(j, k)) dp[i][k] += dp[i - 1][j];
- }
- }
- }
- return dp[n][(1 << m) - 1];
- }
- int main()
- {
- while(~scanf("%d%d", &n, &m) && !(n == 0 && m == 0))
- {
- if((n * m) & 1)
- {
- puts("0");
- continue;
- }
- if(m > n) swap(n, m);
- if(ans[n][m])
- {
- cout << ans[n][m] << endl;
- continue;
- }
- ans[n][m] = solve();
- cout << ans[n][m] << endl;
- }
- return 0;
- }
POJ 2241 Mondriaan's Dream的更多相关文章
- [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
题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过 ...
- POJ 2411 Mondriaan's Dream 插头dp
题目链接: http://poj.org/problem?id=2411 Mondriaan's Dream Time Limit: 3000MSMemory Limit: 65536K 问题描述 S ...
- POJ - 2411 Mondriaan's Dream(轮廓线dp)
Mondriaan's Dream Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One nig ...
- [POJ] 2411 Mondriaan's Dream
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 18903 Accepted: 10779 D ...
- [poj 2411]Mondriaan's Dream (状压dp)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 18903 Accepted: 10779 D ...
- Poj 2411 Mondriaan's Dream(状压DP)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Description Squares and rectangles fascina ...
- Poj 2411 Mondriaan's Dream(压缩矩阵DP)
一.Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, ...
- poj 2411 Mondriaan's Dream(状态压缩dp)
Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...
随机推荐
- win8,定时任务添加(schtasks)
win8,64位,通过CMD命令schtasks,添加定时任务 以下内容,均来自 schtasks /? 和 schtasks /create /? // 1.schtasks /create 的参数 ...
- Android异步下载图片并且缓存图片到本地
Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...
- Ibm-jQuery教程学习笔记
一.概述 1.虽然 jQuery 本身并非一门新的语言.但是,学习其语法有助于我们熟练.灵活地使用它.回顾下我们熟悉的 CSS 语法,不难发现 jQuery 的语法与 CSS 有相似之处. jQuer ...
- linux驱动分离分层的概念
这个分离分层的概念和输入子系统有点像,但不是完全一样的.为什么会再弄一个这个模型出来我也没有搞懂,现在我的学习还停留在把知识学懂的层面上.至于为什么会产生这种知识,现在我还无从解释,还需时日成长. 这 ...
- http://blog.csdn.net/hguisu/article/details/7533759
http://blog.csdn.net/hguisu/article/details/7533759
- 利用Apriori算法对交通路况的研究
首先简单描述一下Apriori算法:Apriori算法分为频繁项集的产生和规则的产生. Apriori算法频繁项集的产生: 令ck为候选k-项集的集合,而Fk为频繁k-项集的集合. 1.首先通过单遍扫 ...
- google 访问
http://maolihui.com/goagent-detail.htmlgoagent教程详细版https://aiguge.xyz/chrome-goagent-proxy-switchyom ...
- ZOJ Problem Set - 3804 YY's Minions
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5336 比较简单的模拟题,题意也很好理解. #include <iostr ...
- 第八篇 EBS实现企业日常业务运管模型的解决方案设计思路
常业务运管模型企业有大有小,各行各业,千差万别,但,其日常业务运管也有相通之处,以典型的制造企业为例,其日常业务运管模型如下图所示: (1)企业日常业务运管模型在市场经济条件下,一个生产型 ...
- 收藏一些python的小技能
例子1:For .. else 语法 foo=[2,1] for i in foo: if i == 0: break else: print("i was never 0") 例 ...