Mondriaan's Dream题解
洛谷原题链接:P10975 Mondriaan's Dream
看数据范围容易发现是状压DP
考虑如何规定状态
设f(i,s)为第i行,填充格式为s的方案数,其中s为二进制数,1表示在这个位置填充一个长方形并使它延伸到i+1(即以i为起点的两行一列的长方形),0表示由i-1延伸而来或填充一个长方形并使它不延伸到i+1(即在第i行放置一行两列的长方形)
转移方程很简单,dp(i,s1)= dp(i-1, s2)+1,关键在于如何判断 s1和s2是否合法
合法性判断:
- 如果i-1的第j位为1,代表j是一个延伸到i的长方形,所以i的第j位就一定是由i-1的第j位填充的,即 s1 & s2 == 0
- 对于s1,被s2填充延伸部分填充之后,不能存在一段连续奇数个0的序列(无法使用两格的长方形填充),即 s1 | s2 之后判断
// x=s1 | s2;
// w=s1.size();
bool check(int x,int w)
{
bool flag=0;
for(int j=0;j<w;j++)
{
if(!((1<<j) & x))
{
if(!flag) flag=1;
else flag=0;
}
else if(flag) return 0;
}
if(flag) return 0;
return 1;
}
- 考虑边界的判断,即当i=n时,s1只能等于0(无法向后面延伸)
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int const N=(1<<11);
int dp[12][N];
int n,m;
bool check(int x,int w)
{
bool flag=0;
for(int j=0;j<w;j++)
{
if(!((1<<j) & x))
{
if(!flag) flag=1;
else flag=0;
}
else if(flag) return 0;
}
if(flag) return 0;
return 1;
}
int sovle (int h,int w)
{
if(h==1)
{
if(w%2) return 0;
else return 1;
}
int res=0;
memset(dp,0,sizeof(dp));
for(int i=0;i<(1<<w);i++) if(check(i,w)) dp[1][i]=1;
for(int i=2;i<=h;i++)
{
for(int now=0;now<(1<<w);now++)
{
for(int bs=0;bs<(1<<w);bs++)
{
if(now & bs) continue;
if(!check((now | bs),w)) continue;
dp[i][now]+=dp[i-1][bs];
}
if(i==h) break;
}
}
for(int i=0;i<(1<<w);i++) res+=dp[h][i];
return res;
}
signed main(){
cin>>n>>m;
while(n or m)
{
cout<<sovle(n,m)<<endl;
cin>>n>>m;
}
return 0;
}
Mondriaan's Dream题解的更多相关文章
- POJ2411 Mondriaan's Dream 题解 轮廓线DP
题目链接:http://poj.org/problem?id=2411 题目大意 给你一个 \(n \times m (1 \le n,m \le 11)\) 的矩阵,你需要用若干 \(1 \time ...
- POJ2411 Mondriaan's Dream(状态压缩)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 15295 Accepted: 882 ...
- POJ 2411 Mondriaan's Dream 插头dp
题目链接: http://poj.org/problem?id=2411 Mondriaan's Dream Time Limit: 3000MSMemory Limit: 65536K 问题描述 S ...
- 【POJ2411】Mondriaan's Dream(轮廓线DP)
[POJ2411]Mondriaan's Dream(轮廓线DP) 题面 Vjudge 题解 这题我会大力状压!!! 时间复杂度大概是\(O(2^{2n}n^2)\),设\(f[i][S]\)表示当前 ...
- POJ1185 炮兵阵地 和 POJ2411 Mondriaan's Dream
炮兵阵地 Language:Default 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 34008 Accepted ...
- PKU P2411 Mondriaan's Dream
PKU P2411 Mondriaan's Dream 题目描述: Squares and rectangles fascinated the famous Dutch painter Piet Mo ...
- POJ 题目2411 Mondriaan's Dream(状压DP)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 13519 Accepted: 787 ...
- HDU 1400 (POJ 2411 ZOJ 1100)Mondriaan's Dream(DP + 状态压缩)
Mondriaan's Dream Problem Description Squares and rectangles fascinated the famous Dutch painter Pie ...
- POJ 2411 Mondriaan's Dream -- 状压DP
题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过 ...
- POJ2411 铺地砖 Mondriaan's Dream
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 15962 Accepted: 923 ...
随机推荐
- 2024百度之星题解 T2跑步
原题链接:跑步 关键词:数学.推公式.lcm.乘法逆元 算法分析:环形跑道相遇次数计算问题 一.最浅显性质分析 性质 a:跑 $ m = \text{lcm}{i|i \in [1,n]} $ 分钟. ...
- freeswitch批量添加用户
默认情况下,freeswitch内置了1000-1019这20个用户,如果需要添加更多用户,可以按如下步骤操作: 一.复制用户文件 \FreeSWITCH\conf\directory\default ...
- 恢复被Windows自动禁用的WIFI适配器
副标题:适配器Intel(R)WiFi6 AX201 160MHz 被Windows禁止使用 副标题:华硕飞行堡垒WIFI适配器恢复使用 相信不少朋友都遇到过突然间电脑上的WIFI无法使用,打开一查看 ...
- linux操作系统中rpm离线包的下载和安装--九五小庞
前言 在Linux操作系统中当需要安装相关程序包时,如果有网络的情况下,可以直接通过yum源命令直接进行下载安装,比较简单方便.但是在没有互联网的情况下,需要下载对应的rpm包,进行离线安装. 1.下 ...
- ugui 通用页签管理器
一直是个痛点,这次解决了, ugui通用 using System.Collections;using System.Collections.Generic;using System.Linq;usi ...
- VUE对象数组,和普通数组的常用方法
在VUE中也可以使用find,findIndex,map等方法对数组对象进行查询,赋值等操作,记录一下 定义数组对象 var arrobj = [{"id":1,"key ...
- 我的代码背叛了我?为什么 a=1, b=2,最后x和y都等于0?
随着多核架构的普及,并发编程已成为开发者不可或缺的核心技能.在学习过程中,开发者常会遇到这样的困惑:正确编写的单线程代码,为何在并发环境下可能瞬间失效?看似有序的语句执行后,为何结果却混乱不堪?这些问 ...
- Golang基础笔记十六之反射
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记十六之反射 反射可以用于程序在运行时检查.修改自身类型和值,主要通过 reflect 包实现. 首先,我们提出一个需求,要打印出一个结 ...
- 免费的个人网站托管-GitHub Pages篇
前情 对于前端开发来说,拥有一个自己的个人网站是一种执着也是一种排面,但是大部分前端也都对服务端这一块的东西都停留在了解阶段,但是如果正儿八经的上线一个网站或多或少需要懂一些服务端知识,需要购买服务器 ...
- linux机群下NFS+NIS服务的搭建以及MPICH的简单安装
MPICH是目前应用最广泛的免费MPI系统,也是运行在大部分机群系统的MPI并行环境 MPICH的网址是:http://www.mcs.anl.gov/mpi/mpich,从此处可以下载源程序mpic ...