$POJ2411\ Mondriaan's\ Dream$ 状压+轮廓线$dp$
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 ;
}
随机推荐
- mysql数据库之工作流程
MySQL架构总共四层,在上图中以虚线作为划分. 首先,最上层的服务并不是MySQL独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构.比如:连接处理.授权认证.安全等. 第二层的架构 ...
- mysql查同个实例两个数据库中的表名差异
select TABLE_NAME from ( select TABLE_NAME ,) as cnt from information_schema.tables where TABLE_SCHE ...
- win10提示 磁盘包含不是“PARTITION_BASIC_DATA_GUID"类型的分区
在win10创建新的磁盘分区的时候,有时候会提示 磁盘包含不是"PARTITION_BASIC_DATA_GUID"类型的分区 如果你试了其他方法都不凑效,那么看看你已经有几个盘( ...
- 为你的 SuperSocket 启用动态语言
步骤如下: 1.添加 DLR (dynamic language runtime) 配置片段; Section 定义: <section name="microsoft.scripti ...
- git提交时如何忽略一些文件
起因 在使用git对软件进行版本管理的时候我们总有一些不需要提交到版本库里的文件和文件夹,或者在管理一个实际应用的开源项目的时候,不可以把带有数据库信息的文件上传到开源平台当中,这个时候我们就需要让g ...
- Springboot学习笔记(一)—— 安装
springboot越来越流行了,相比较于springMVC,springboot采用了一种约定大于配置的理念,可以一键安装,一键运行,一键部署,内置tomcat,省去了一大堆配置的时间,并且,spr ...
- H3C 路由优先级
- openmp的g++并行执行
#include <omp.h>#include <stdio.h>#include <stdlib.h>void Test(int n) { for(int ...
- POJ 2778 DNA Sequence (ac自动机+矩阵快速幂)
DNA Sequence Description It's well known that DNA Sequence is a sequence only contains A, C, T and G ...
- 【t081】序列长度(贪心做法)
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有一个整数序列,我们不知道她的长度是多少(即序列中整数的个数),但我们知道在某些区间中至少有多少个整数 ...