#1048 : 状态压缩·二

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

历经千辛万苦,小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
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#include<stack>
#include<cmath>
#include<map>
#include<set>
#include<bitset>#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1)#define bug(msg) cout << msg << endl;using namespace std;
#define mod 1000000007
#define eps 1e-8
#define N 1005
#define M 6int dp[N][1<<M];
int ans[N][M];
int n,m;inline bool check(int pre, int cur)
{int len = (1 << m) - 1;if ((pre | cur) != len)return false;for (int i = 0; i < m;){if (cur & (1 << i)){if (!(pre & (1 << i))){i++;continue;}else{if (!(pre & (1 << (i+1)))) return false;if (!(cur & (1 << (i+1)))) return false;i+=2;continue;}}else{if (!(pre & (1 << i)))return false;i++;}}return true;
}int dfs(int pos, int preStatus)
{if (pos == n + 1)return preStatus == (1 << m) - 1 ? 1 : 0;if (dp[pos][preStatus] != -1)return dp[pos][preStatus];int ans = 0;for (int curStatus = 0; curStatus < (1<<m); curStatus++){if (check(preStatus, curStatus))ans = (ans + dfs(pos + 1, curStatus)) % mod;}return dp[pos][preStatus] = ans;
}int solve()
{memset(dp, -1, sizeof(dp));dp[0][(1<<m) - 1] = 0;return dfs(1, (1 << m) - 1);
}int main()
{memset(ans, -1, sizeof(ans));while (~scanf("%d%d", &n, &m)){if (ans[n][m]!= -1)cout << ans[n][m] << endl;elsecout << (ans[n][m] = solve()) << endl;}return 0;
}

hihoder 1048相关推荐

  1. NYOJ题目1048破门锁

    -------------------------------------------------- 每个锁位上可能的数为5(正确的一个+上偏移的两个+下偏移的两个),所以总共可能性为: 但是这里面有 ...

  2. PAT Basic 1048

    1048 数字加密 本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余- ...

  3. PAT甲级1048 Find Coins :[C++题解]哈希表、两个硬币之和为定值

    文章目录 题目分析 题目链接 题目分析 来源:acwing 题意:找两个数,和为定值. 分析:本题在各大OJ上几乎都有, 反正在Leetcode上做过.本题有两种常见的解法,一种是双指针,另一种是用哈 ...

  4. Follow My Logic 1048 PKU

    Follow My Logic http://acm.pku.edu.cn/JudgeOnline/problem?id=1048 确定由一个或多个输入.0个或多个与或门组成的逻辑电路 电路路径通过水 ...

  5. [BZOJ 1048] [HAOI2007] 分割矩阵 【记忆化搜索】

    题目链接:BZOJ - 1048 题目分析 感觉这种分割矩阵之类的题目很多都是这样子的. 方差中用到的平均数是可以直接算出来的,然后记忆化搜索 Solve(x, xx, y, yy, k) 表示横坐标 ...

  6. HDU 1048 [The Hardest Problem Ever] 字符串处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1048 题目大意:对一串字符串进行加密:每个英文字母变为字母表此后第五位,其他字符无变化.给出密码,要求 ...

  7. C++学习之路 | PTA乙级—— 1048 数字加密 (20 分)(精简)

    1048 数字加密 (20 分) 本题要求实现一种数字加密方法.首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 ...

  8. 信息学奥赛一本通 1048:有一门课不及格的学生 | OpenJudge NOI 1.4 10

    [题目链接] ybt 1048:有一门课不及格的学生 OpenJudge NOI 1.4 10:有一门课不及格的学生 [题目考点] 1. 逻辑表达式 2. if-else语句嵌套 [解题思路] 语文数 ...

  9. 信息学奥赛一本通(1048:有一门课不及格的学生)

    1048:有一门课不及格的学生 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 92786     通过数: 37823 [题目描述] 给出一名学生的语文和数学成绩 ...

  10. HDU 1048 The Hardest Problem Ever

    原题大意: 给出相应的密码本,将密文字母按照所给密码本列出的对应关系解密,字母均为大写,对于非大写字母则同密文保持一致,即不用翻译原样输出. 密码本:Cipher text(密文)A B C D E ...

最新文章

  1. python自定义函数和类并调用
  2. 开启ubuntu的SSH服务,使用终端远程控制
  3. 用webpack构建一个常规项目,好处和坏处分析
  4. ssh 协议 java_java代码之SSH协议连接linux
  5. kafka单机模式删除某一个topic的数据,并解决Topic xxxx is marked for deletion....报错
  6. 本周Whale Alert监测到7.9万枚BTC在匿名地址间转账
  7. ssas如何创建分区_如何基于SSAS信息创建Excel报告
  8. php 数组重新打乱_php打乱数组二维数组多维数组的简单实例
  9. 常用日期格式符(表格)
  10. 计算机毕业设计django基于python金太阳家居电商平台(源码+系统+mysql数据库+Lw文档)
  11. 工具说明书 - 网页内容抓取工具Web Scraper(一)
  12. android 动态壁纸 例子,调用android动态壁纸的实例介绍
  13. 14-英伟达NVIDIA显卡驱动下载与安装
  14. 淘宝京东天猫电商运营每天都需要做什么?
  15. html word 页面视图,word页面视图视图和web视图的区别
  16. python字符串相减
  17. Leetcode力扣 MySQL数据库 1132 报告的记录II
  18. leaflet地图原理_leaflet绘制区域(仿高德地图效果)
  19. HTTP GET请求方式传递数组参数
  20. 苹果开机是白苹果黑屏_这是苹果应如何回应史诗般的1984年诱饵

热门文章

  1. Liunx使用apt安装本地deb软件包
  2. 2021年全新大数据学习路线图,(含入门到精通项目学习免费教程哦)
  3. Express中间件
  4. 从前慢-深入理解JVM-篇章1
  5. 计算机网络——虚拟专用网与网络地址转换NAT
  6. 计算机网络ping用法,新手入门:ping命令的用法解释
  7. Matlab代码实现绘制趋势图
  8. 快递系统java实验报告_快递管理毕业论文-基于java的物流快递管理系统设计
  9. 智能家居生活之视频监控
  10. “中年跳槽,伤筋动骨”:35岁跳槽,你可要想清楚