[HIHO] 1048 铺地板
历经千辛万苦,小Hi和小Ho终于到达了举办美食节的城市!虽然人山人海,但小Hi和小Ho仍然抑制不住兴奋之情,他们放下行李便投入到了美食节的活动当中。美食节的各个摊位上各自有着非常多的有意思的小游戏,其中一个便是这样子的:
小Hi和小Ho领到了一个大小为N*M的长方形盘子,他们可以用这个盒子来装一些大小为2*1的蛋糕。但是根据要求,他们一定要将这个盘子装的满满的,一点缝隙也不能留下来,才能够将这些蛋糕带走。
这么简单的问题自然难不倒小Hi和小Ho,于是他们很快的就拿着蛋糕离开了~
但小Ho却不只满足于此,于是他提出了一个问题——他们有多少种方案来装满这个N*M的盘子呢?
值得注意的是,这个长方形盘子的上下左右是有区别的,如在N=4, M=3的时候,下面的两种方案被视为不同的两种方案哦!

提示:我们来玩拼图吧!不过不同的枚举方式会导致不同的结果哦!
输入
每个测试点(输入文件)有且仅有一组测试数据。
每组测试数据的第一行为两个正整数N、M,表示小Hi和小Ho拿到的盘子的大小。
对于100%的数据,满足2<=N<=1000, 3<=m<=5。<>
输出
考虑到总的方案数可能非常大,只需要输出方案数除以1000000007的余数。
样例输入
2 4
样例输出
5
状压DP,令1为竖着放的头,其余为0。
预处理每行连续0的个数的奇偶性
条件
1.连续0个数为偶数
2.两行1不能重合(&结果为0)
三重循环转移,最后一行一定不能再开始放竖着的方块了,所以0状态就是答案。
//Stay foolish,stay hungry,stay young,stay simple
#include<iostream>
using namespace std;
const int MAXN=20000;
bool ok[MAXN];
int n,m;
int f[1005][128];
int main(){
cin>>n>>m;
for(int i=0;i<(1<<m);i++){
bool flag=0;
bool ans=0,cnt=0;
for(int k=0;k<m;k++){
if((i>>k)&1){
ans|=cnt;
cnt=0;
}else cnt^=1;
}
ans|=cnt;
ok[i]=!ans;
}
f[0][0]=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(!ok[j|k]) continue;
if((j&k)) continue;
f[i][j]+=f[i-1][k];
f[i][j]%=1000000007;
}
}
}
cout<<f[n][0]%1000000007<<endl;
return 0;
}
[HIHO] 1048 铺地板的更多相关文章
- 【DP】HIHO 1078
HIHO #1037 : 数字三角形 题意:中文题就不说了. 思路:提示也很清楚,就这里贴一下代码.注意边界情况. dp[i][j] = max(dp[i-1][j],dp[i-1][j-1])+ma ...
- hiho一下21周 线段树的区间修改 离散化
离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho ...
- lightoj.1048.Conquering Keokradong(二分 + 贪心)
Conquering Keokradong Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
- NYOJ题目1048破门锁
- AC日记——石子归并 codevs 1048
1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 有n堆石子排成一列,每堆石子 ...
- hiho #1283 hiho密码 [Offer收割]编程练习赛3
#1283 : hiho密码 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho根据最近在密码学课上学习到的知识,开发出了一款hiho密码,这款密码的秘钥是这样生成的 ...
- hiho一下 第九十五周 数论四·扩展欧几里德
题目 : 数论四·扩展欧几里德 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho周末在公园溜达.公园有一堆围成环形的石板,小Hi和小Ho分别站在不同的石板上 ...
- 【BZOJ】1048: [HAOI2007]分割矩阵
http://www.lydsy.com/JudgeOnline/problem.php?id=1048 题意:给出一个a×b(a,b<=10)的矩阵,带一个<=100的权值,现在要切割n ...
- hiho 毁灭者问题
描述 在 Warcraft III 之冰封王座中,毁灭者是不死族打三本后期时的一个魔法飞行单位. 毁灭者的核心技能之一,叫做魔法吸收(Absorb Mana): 现在让我们来考虑下面的问题: 假设你拥 ...
随机推荐
- 51nod 1094 【水题】
暴力即可!!! #include <stdio.h> #include <string.h> #include <iostream> using namespace ...
- CF1059D Nature Reserve(二分)
简洁翻译: 有N个点,求与y=0相切的,包含这N个点的最小圆的半径 题解 二分半径右端点开小了结果交了二十几次都没A……mmp…… 考虑一下,显然这个半径是可以二分的 再考虑一下,如果所有点都在y轴同 ...
- java final static 和final区别
static 和非static 之间的差异,只有当值在运行期间初始化的前提下,这种差异才会揭示出来.因为编译期间的值被编译器认为是相 同的. package thinking; public clas ...
- bzoj 5019 [Snoi2017]遗失的答案
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=5019 题解 如果L不是G的倍数 答案为0 下面考虑G|L的情况 将G,L质因数分解 设$L= ...
- JavaScript--字符串常用方法总结
JavaScript--字符串常用方法总结 举例模板: var str = "what are you " var str1 = "sss" var txt = ...
- Android 暗码表
转自: http://blog.csdn.net/jiangshide/article/details/8192834 不同手机厂商可能会隐藏或修改暗码,部份暗码要谨慎使用,因为可能令手机失去原有的功 ...
- shell expect
关键的action spawn 调用要执行的命令expect 捕捉用户输入的提示 send 发送需要交互的值,替代了用户手动输入内容set 设置变量值 ...
- java中的compareto方法以及LIst列表排序的详细介绍【转】
java中的compareto方法的详细介绍 javacompareTo java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值,看下面一组代码 String a=&quo ...
- php数组与字符串转换
1.将字符串转换成数组的几个函数: (1)explode(separate,string) 示例:$str = "Hello world It's a beautiful day" ...
- ASP.NET MVC Identity 兩個多個連接字符串問題解決一例
按照ASP.NET MVC Identity建立了一個用戶權限管理模塊,由于還要加自己已有的數據庫,所以建立了一個實體模型,建立了之后,發現登錄不了: 一直顯示“Login in failed for ...