传送门

Sol

首先状压大概是很容易想到的

一般的做法大概就是枚举每种状态然后判断转移

但是这里其实可以轮廓线dp

也就是从上到下,从左到右地放方块

假设我们现在已经放到了$(i,j)$这个位置

那么影响这个位置怎么填的其实就只有这个位置上面的位置到它左边的位置这一段的状态

于是把这一段从上到下从左往右状压起来,1表示被覆盖了,0表示没被覆盖

$f[i][j][s]$表示填到第$(i,j)$,$(i-1,j)$到$(i,j-1)$的状态为s 的方案数

转移:

原则是要把现在考虑的一行的上一行填满,不然它就永远不会被覆盖了

若$(i-1,j)=0$,即上面的格子没放,这时只能放竖起来的方块

若$(i-1,j)=1,(i,j-1)=0$即上面的格子放了,左边的格子没放,这时可以放横着的方块

若$(i-1,j)=1$即上面的格子放了,这时可以不放方块

最后要注意第一行的状态

Code

 #include<iostream>
#include<cstdio>
#include<cstring>
#define Ri register int
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int n,m;
ll f[][<<];
int main()
{
while()
{
scanf("%d%d",&n,&m);
if(!n||!m)break;
mem(f,);f[][(<<m)-]=;
for(Ri i=;i<=n;i++)
for(Ri j=,t=m*(i-)+j;j<=m;j++,t++)
for(Ri k=;k<(<<m);k++)
if(f[t-][k])
{
ll hhh=f[t-][k];
if(i> && !(k&))
f[t][(k>>)|(<<(m-))]+=hhh;
if(j> && !(k&(<<(m-))) && (k&))
f[t][(k>>)|(<<(m-))|(<<(m-))]+=hhh;
if(i==||k&)
f[t][k>>]+=hhh;
}
printf("%lld\n",f[n*m][(<<m)-]);
}
return ;
}

随机推荐

  1. PHP5.2 汉字json_encode

    //对汉字编码 private function url_encode($str) { if(is_array($str)) { foreach($str as $key=>$value) { ...

  2. include 语句中使用双引号与括号有什么区别?

    Include 的语法 你在学习如何构造函数时,看到了不同的 include 语句: # include <iostream> # include "distance.h&quo ...

  3. Libev源码分析03:Libev使用堆管理定时器

    Libev中在管理定时器时,使用了堆这种结构,而且除了常见的最小2叉堆之外,它还实现了更高效的4叉堆. 之所以要实现4叉堆,是因为普通2叉堆的缓存效率较低,所谓缓存效率低,也就是说对CPU缓存的利用率 ...

  4. 给tomcat容器配置SSL的记录,包含项目完整部署过程

    给tomcat容器配置SSL(https) 昨天公司有一个旧的项目要部署, 服务器(OS是windows 10) 数据库都是新买的, 写个博客记录一下 1, 下载证书(以阿里云为例子) 参考链接: h ...

  5. 【原生JS】自动渐变轮播

    渐变主要是通过CSS3的动画实现. 只需给css中添加transtion动画时间加上JS设置指定图片透明度显示与消失即可实现渐变过程. 效果图: HTML: <!DOCTYPE html> ...

  6. C#的类

    一.String类 1.Length 字符的长度 string x = Console.ReadLine();int i = x.Length;// Length 是获取字符串的长度(从1开始数)Co ...

  7. TP5单例模式操作Model

    tp5单例模式的代码实现 为什么要使用单例模式 使用单例模式实现逻辑处理与数据库操作分离能很大提升mysql的sql处理能力,并且易于维护 ArticleModel.php <?php name ...

  8. 前端开发工具之jQuery

    jQuery jQuery是一个轻量级的JavaScript第三方库,能够简单方便的进行JavaScript编程. jQuery选择器 1,id选择器: $("#id") 2,标签 ...

  9. UVa 1374 - Power Calculus——[迭代加深搜索、快速幂]

    解题思路: 这是一道以快速幂计算为原理的题,实际上也属于求最短路径的题目类型.那么我们可以以当前求出的幂的集合为状态,采用IDA*方法即可求解.问题的关键在于如何剪枝效率更高.笔者采用的剪枝方法是: ...

  10. vmware虚拟机卸载干净在注册表的也需要删除