传送门

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. @总结 - 1@ 多项式乘法 —— FFT

    目录 @0 - 参考资料@ @1 - 一些概念@ @2 - 傅里叶正变换@ @3 - 傅里叶逆变换@ @4 - 迭代实现 FFT@ @5 - 参考代码实现@ @6 - 快速数论变换 NTT@ @7 - ...

  2. iptables 规则(Rules)

    iptables的每一条规则(rule),都是由两部分组成的,第一部分包含一或多个「过滤条件」其作用是检查包是否符合处理条件(所有条件都必须成立才算数) :第而部分称为「目标」,用於決定如何处置符合条 ...

  3. H3C 专线连接模型

  4. 【codeforces 777E】Hanoi Factory

    [题目链接]:http://codeforces.com/problemset/problem/777/E [题意] 让你摆汉诺塔片; 要求在上面的片的外圈大于在下面的片的内圈,且小于下面的片的外圈; ...

  5. iptables [-j target/jump] 常用的处理动作

    -j 参数用来指定要进行的处理动作,常用的处理动作包括:ACCEPT.REJECT.DROP.REDIRECT.MASQUERADE.LOG.DNAT.SNAT.MIRROR.QUEUE.RETURN ...

  6. HTTP协议---三次握手

    HTTP协议 关于协议 ​ 对于应用层开发人员,接触最多的网络协议通常都是传输层的TCP,为什么这么说,因为再往上的应用层协议,如:HTTP.HTTPS.POP3.SMTP.RPC.FTP.TELNE ...

  7. Python--day42--mysql数据库--mysql前言

  8. java throw

    自行抛出一个异常对象,抛出异常类的对象: 若throw抛出的是Runtime异常: 程序可以显示使用try...catch来捕获并处理,也可以不管,直接交给方法调用者处理: 若throw抛出Check ...

  9. linux scull 中的缺陷

    让我们快速看一段 scull 内存管理代码. 在写逻辑的深处, scull 必须决定它请求的内 存是否已经分配. 处理这个任务的代码是: if (!dptr->data[s_pos]) { dp ...

  10. git常用常用操作指令

    GIT操作 1:git init 初始化空的仓库,会在当前文件夹生成一个隐藏.git的文件夹,相当于一个仓库. 2:提交代码的流程:工作代码区-->暂存区 -->主仓库 -->服务器 ...