SGU 131.Hardwood floor
时间限制:0.25s
空间限制:4M
题意:
给出 n*m (1≤n、m≤9)的方格棋盘,用 1*2 的矩形的骨牌和 L 形的(2*2 的
去掉一个角)骨牌不重叠地覆盖,求覆盖满的方案数。
Solution:
还是状态压缩,这次的情况比较多,要全部列出。
b1,b2分别代表上下两行前列对下一列的影响
s1,s2对应上下两行的状态
|
情况 |
上列b1,b2要求 |
状态改变 | 对下一列的影响 |
|
10 10 |
b1=0, b2=0; |
s1<<1, s2<<1|1; |
b1=0, b2=0; |
|
11 10 |
b1=0, b2=0; |
s1<<1, s2<<1|1; |
b1=1, b2=0; |
|
10 11 |
b1=0, b2=0; |
s1<<1, s2<<1|1; |
b1=0, b2=1; |
|
00 11 |
b2=0; |
s1<<1|1-b1, s2<<1|1; |
b1=0, b2=1; |
|
01 11 |
b2=0; |
s1<<1|1-b1, s2<<1|1; |
b1=1, b2=1; |
|
11 01 |
b1=0; |
s1<<1, s2<<1|b2; |
b1=1, b2=1; |
|
00 00 |
无 |
s1<<1|1-b1, s2<<1|b2; |
b1=0, b2=0; |
参考代码:
#include <iostream>
#include <cstdio>
#define LL long long
using namespace std;
int n, m, x;
LL f[12][1 << 12];
//b1,b2,分别标记上一列队下一列的影响
void dfs (int k, int last, int now, int b1, int b2) {
if (k == m){
if(!b1&&!b2)
f[x][now] += f[x - 1][last];
return;
}
if (!b1 && !b2) {
dfs (k + 1, last << 1 , now << 1 | 1, 0, 0);
dfs (k + 1, last << 1 , now << 1 | 1, 1, 0);
dfs (k + 1, last << 1 , now << 1 | 1, 0, 1);
}
if (!b1)
dfs (k + 1, last << 1 , now << 1 | b2, 1, 1);
if (!b2) {
dfs (k + 1, last << 1 | (1-b1), now << 1 | 1, 0, 1);
dfs (k + 1, last << 1 | (1-b1), now << 1 | 1, 1, 1);
}
dfs (k + 1, last << 1 | (1-b1), now << 1 | b2, 0, 0);
}
int main() {
scanf ("%d %d", &n, &m);
if (n < m) swap (n, m);
f[0][ (1 << m) - 1] = 1;
for ( x = 1; x <= n; x++)
dfs (0, 0, 0, 0, 0);
printf ("%lld", f[n][ (1 << m) - 1]);
}
SGU 131.Hardwood floor的更多相关文章
- SGU 131. Hardwood floor 状压dp 难度:2
131. Hardwood floor time limit per test: 0.25 sec. memory limit per test: 4096 KB The banquet hall o ...
- Hardwood floor - SGU 131(状态压缩)
题目大意:用 2*1 或者2*2-1的格子覆盖M*N的矩阵,有多少种覆盖方式. 分析:容易知道有以下6种放置方式. 然后用深搜的方法直接搞出来就行了,不过要使用两个变量来判断本位是否受影响.如果本行的 ...
- sgu 131 状压DP
棋盘覆盖(二) 时间限制:1000 ms | 内存限制:65535 KB 描述 The banquet hall of Computer Scientists' Palace has a ...
- SGU131 - Hardwood floor(状态压缩DP)
题目大意 给定一个N*M大小的矩形,要求你用1*2和2*2(缺个角)的砖块把矩形铺满(不能重叠),问总共有多少种铺法? 题解 受POJ2411的影响,怎么都没想到3,4,5,6这几种情况该怎么放置,看 ...
- SGU 分类
http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traff ...
- 今日SGU 5.15
最近事情好多,数据库作业,没天要学2个小时java,所以更新的sgu就比较少了 SGU 131 题意:给你两种小块一种,1*1,一种2*2-1*1,问你填满一个m*n的矩形有多少钟方法,n和m小于等于 ...
- 今日SGU 5.14
//SGU 131 还没完全想清楚 留坑 SGU 259 题意:一个机器处理n个任务,每个任务有时间t和传送时间l 收获:贪心 #include<bits/stdc++.h> #defin ...
- 别人整理的DP大全(转)
动态规划 动态规划 容易: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...
- dp题目列表
此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...
随机推荐
- UIImageVIew的使用
UIImageView是一个用于显示图片的控件 构造方法: UIImage * tempImage = [UIImage imageNamed:IMAGE_NAME]; imageVi ...
- qut训练题解-2016-9-4个人赛
题目链接:http://acm.hust.edu.cn/vjudge/contest/131124#overview 贴了链接这里就不上原题的描述了. A: B: 分析:这里用到简单的拓扑排序的算法. ...
- Linux下安装MySQL5.6
传送门:http://www.jianshu.com/p/f4a98a905011 字数802 阅读164 评论0 喜欢4 环境:1.操作系统:CentOS release 6.8 (Final)2. ...
- memcached与redis 对比
一. 综述 读一个软件的源码,首先要弄懂软件是用作干什么的,那memcached和redis是干啥的?众所周知,数据一般会放在数据库中,但是查询数据会相对比较慢,特别是用户很多时,频繁的查询,需要耗费 ...
- druid报异常 “sql injection violation, part alway true condition not allow”的解决方案
使用durid连接池组件,执行sql时发现异常如下: Caused by: java.sql.SQLException: sql injection violation, part alway tru ...
- Oracle、MySql、Sql Server比对
1. 价格 MySql:廉价(部分免费):当前,MySQL採用双重授权(DualLicensed),他们是GPL和MySQLAB制定的商业许可协议.假设你在一个遵循GPL的自由(开源)项目中使用 ...
- rancher 笔记 之 rancher应用中心
rancher应用中心 rancher 的应用中心 可以 自定义,在 admin -> catlog 中 指定路劲 rancher的应用中心 就是一个git项目 指定git的路劲的时候 填写的是 ...
- Kruskal算法模拟讲解
Kruskal 算法是一个求最小生成树的算法,即求最小的开销等 算法可以这样,要求得最小生成树,那么n个节点只能包括n-1条边 所以我们应该转换为寻找这最短的n-1条边,因此,可以先对所有的 边进行从 ...
- python装饰实现线程同步
import threading def tryfinally(finallyf): u"returns a decorator that adds try/finally behavi ...
- Eclipse中文语言包下载
Kepler .Juno . Indigo语言包: http://www.eclipse.org/babel/downloads.php 其他低版本Eclipse语言包下载: http://archi ...