UVA11270 Tiling Dominoes
\(\color{#0066ff}{ 题目描述 }\)
给定一个m×n的矩形网格,用1×2多米诺骨牌完全平铺。 请注意,即使一个平铺的旋转与另一个平铺相匹配,它们仍算作不同的平铺。 下面显示了一个平铺示例。 输入格式
输入包括多组数据。每组数据占一行,包含两个整数m,n(n×m≤100)。输入结束标志为文件结束符(EOF)。 输出格式
对于每组数据输出一行,输出总数。
\(\color{#0066ff}{输入格式}\)
每组数据,两个整数 \(n,m\)
\(\color{#0066ff}{输出格式}\)
对于每组数据,输出答案。
\(\color{#0066ff}{输入样例}\)
2 10
4 10
8 8
\(\color{#0066ff}{输出样例}\)
89
18061
12988816
\(\color{#0066ff}{数据范围与提示}\)
\(n*m\leq 100\)
\(\color{#0066ff}{ 题解 }\)
一个状压DP,也可以写插头DP蒟蒻目前还不会
可以发现,行或列其中一个一定不超过10,所以将其状压
横着的块均为0, 竖着的块,上面为1, 下面为0
因此,如果上一行的某位置为1,那么本行该位置必须为0, 代表竖着块的下半部分
最后一行的状态必须为0
如何判断一个状态能否作为某状态的下一行
首先,对于横着的块,肯定是成对出现的,但是如果上一行是1,那么对应本行的0是属于竖着的块的,是独立的,不能与旁边的0拼成横着的
可以发现,将它们进行按位或,那么那些特殊的0就成了1, 这时候判断一下每次连续的0是否有偶数个就行了
对于上面是1下面必须是0的问题,可以按位与一下,为0就行了
为了保证时间复杂度,与处理出合法拼接状态,就能过了
#include<bits/stdc++.h>
#define LL long long
LL in() {
char ch; LL x = 0, f = 1;
while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);
for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));
return x * f;
}
using std::vector;
LL f[120][2050];
vector<int> v[2050][11];
int n, m;
bool cant(int zt, int lim) {
int tot = 0;
for(int i = 0; i < lim; i++) {
if(zt & (1 << i)) {
if(tot & 1) return true;
tot = 0;
}
else tot++;
}
if(tot & 1) return true;
return false;
}
LL dfs(int dep, int zt) {
if(dep == n) return !zt;
if(f[dep][zt]) return f[dep][zt];
for(int i = 0; i < (int)v[zt][m].size(); i++) {
f[dep][zt] += dfs(dep + 1, v[zt][m][i]);
}
return f[dep][zt];
}
bool ok(int zt) {
for(int i = 1; i < 9; i++)
if(!(zt & (1 << i)) && (zt & (1 << (i - 1))) && (zt & (1 << (i + 1)))) return false;
return true;
}
int main() {
for(int lim = 1; lim <= 10; lim++)
for(int i = 0; i < (1 << lim); i++)
for(int j = 0; j < (1 << lim); j++) {
if((i & j) || cant(i | j, lim)) continue;
v[i][lim].push_back(j);
}
while(~scanf("%d%d", &n, &m)) {
if(m > n) std::swap(n, m);
memset(f, 0, sizeof f);
if((n * m) & 1) puts("0");
else printf("%lld\n", m == 1? (n & 1? 0 : 1) : dfs(0, 0));
}
return 0;
}
UVA11270 Tiling Dominoes的更多相关文章
- UVA11270 Tiling Dominoes —— 插头DP
题目链接:https://vjudge.net/problem/UVA-11270 题意: 用2*1的骨牌填满n*m大小的棋盘,问有多少种放置方式. 题解: 骨牌类的插头DP. 1.由于只需要记录轮廓 ...
- UVA11270 Tiling Dominoes(轮廓线动态规划)
轮廓线动态规划是一种基于状态压缩解决和连通性相关的问题的动态规划方法 这道题是轮廓线动态规划的模板 讲解可以看lrj的蓝书 代码 #include <cstdio> #include &l ...
- uva 11270 - Tiling Dominoes(插头dp)
题目链接:uva 11270 - Tiling Dominoes 题目大意:用1∗2木块将给出的n∗m大小的矩阵填满的方法总数. 解题思路:插头dp的裸题,dp[i][s]表示第i块位置.而且该位置相 ...
- 【UVa】11270 Tiling Dominoes
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- <Sicily>Tiling a Grid With Dominoes
一.题目描述 We wish to tile a grid 4 units high and N units long with rectangles (dominoes) 2 units by on ...
- 2016 Multi-University Training Contest 1 I. Solid Dominoes Tilings
Solid Dominoes Tilings Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- POJ3420Quad Tiling(矩阵快速幂)
Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3740 Accepted: 1684 Descripti ...
- Tri Tiling[HDU1143]
Tri Tiling Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- I - Tri Tiling
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status #in ...
随机推荐
- 转:InnoDB Log Block Structure(InnoDB日志Block结构详解)
文章转载自等博 InnoDB Log Block Structure(InnoDB日志Block结构详解)
- Mysql教程:[1]下载安装配置详细教程
如果不小心你下载了免安装的mysql,那么你比较倒霉,你找不到setup文件,还得自己去配置很多东西,然后再使用命令安装.所以我今天呢写一篇教程,写的尽量详细,即便是菜鸟也能安装,我自己安装过很多遍了 ...
- mybatis---demo1--(单表增删改查)----bai
实体类: package com.etc.entity; public class News { private int id; private String title; private Strin ...
- python 函数和方法的区别
一.函数和方法的区别 1.函数要手动传self,方法不用传 2.如果是一个函数,用类名去调用,如果是一个额方法,用对象去调用 举例说明: class Foo(object): def __init__ ...
- apache + tomcat 负载均衡分布式集群配置
Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问 ...
- AudioTrack
AudioTrack 在Java应用中,管理和播放一个单一的语音资源 The AudioTrack class manages and plays a single audio resource fo ...
- re.findall 两个连续匹配成功的输出后一个
- 数据库开源框架ormlite
今天听说了ORM框架ORMLITE,特地去了解了一下. 该框架可以使用注解方式来生成数据库表,还封装了常用的数据库操作. 类似J2EE的HIBERNATE框架对数据库的处理. 省去了书写建表语句的麻烦 ...
- apaache php 日记设计
有个客户服务器是用apache搭建的,最近总是感觉站很慢,服务器很慢很卡,有时候甚至网 站都打不开,后来经过排查分析原来是里面的access.log和error.log这两个文件要经常上去看,和清理, ...
- 【总结整理】行内标签span设置position:absolute/float属性可以设置宽度与高度
postion:absolute 跳出文本流,不是行内元素,设置宽高有效,我的理解. 引用下曹刘阳写的<编写高质量代码-web前端开发修炼之道>一书中看到的一句话:position:abs ...