洛谷原题链接: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是否合法


合法性判断:

  1. 如果i-1的第j位为1,代表j是一个延伸到i的长方形,所以i的第j位就一定是由i-1的第j位填充的,即 s1 & s2 == 0
  2. 对于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;
}
  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题解的更多相关文章

  1. POJ2411 Mondriaan's Dream 题解 轮廓线DP

    题目链接:http://poj.org/problem?id=2411 题目大意 给你一个 \(n \times m (1 \le n,m \le 11)\) 的矩阵,你需要用若干 \(1 \time ...

  2. POJ2411 Mondriaan's Dream(状态压缩)

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 15295   Accepted: 882 ...

  3. POJ 2411 Mondriaan's Dream 插头dp

    题目链接: http://poj.org/problem?id=2411 Mondriaan's Dream Time Limit: 3000MSMemory Limit: 65536K 问题描述 S ...

  4. 【POJ2411】Mondriaan's Dream(轮廓线DP)

    [POJ2411]Mondriaan's Dream(轮廓线DP) 题面 Vjudge 题解 这题我会大力状压!!! 时间复杂度大概是\(O(2^{2n}n^2)\),设\(f[i][S]\)表示当前 ...

  5. POJ1185 炮兵阵地 和 POJ2411 Mondriaan's Dream

    炮兵阵地 Language:Default 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 34008 Accepted ...

  6. PKU P2411 Mondriaan's Dream

    PKU P2411 Mondriaan's Dream 题目描述: Squares and rectangles fascinated the famous Dutch painter Piet Mo ...

  7. POJ 题目2411 Mondriaan's Dream(状压DP)

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 13519   Accepted: 787 ...

  8. HDU 1400 (POJ 2411 ZOJ 1100)Mondriaan's Dream(DP + 状态压缩)

    Mondriaan's Dream Problem Description Squares and rectangles fascinated the famous Dutch painter Pie ...

  9. POJ 2411 Mondriaan's Dream -- 状压DP

    题目:Mondriaan's Dream 链接:http://poj.org/problem?id=2411 题意:用 1*2 的瓷砖去填 n*m 的地板,问有多少种填法. 思路: 很久很久以前便做过 ...

  10. POJ2411 铺地砖 Mondriaan's Dream

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 15962   Accepted: 923 ...

随机推荐

  1. 2024百度之星题解 T2跑步

    原题链接:跑步 关键词:数学.推公式.lcm.乘法逆元 算法分析:环形跑道相遇次数计算问题 一.最浅显性质分析 性质 a:跑 $ m = \text{lcm}{i|i \in [1,n]} $ 分钟. ...

  2. freeswitch批量添加用户

    默认情况下,freeswitch内置了1000-1019这20个用户,如果需要添加更多用户,可以按如下步骤操作: 一.复制用户文件 \FreeSWITCH\conf\directory\default ...

  3. 恢复被Windows自动禁用的WIFI适配器

    副标题:适配器Intel(R)WiFi6 AX201 160MHz 被Windows禁止使用 副标题:华硕飞行堡垒WIFI适配器恢复使用 相信不少朋友都遇到过突然间电脑上的WIFI无法使用,打开一查看 ...

  4. linux操作系统中rpm离线包的下载和安装--九五小庞

    前言 在Linux操作系统中当需要安装相关程序包时,如果有网络的情况下,可以直接通过yum源命令直接进行下载安装,比较简单方便.但是在没有互联网的情况下,需要下载对应的rpm包,进行离线安装. 1.下 ...

  5. ugui 通用页签管理器

    一直是个痛点,这次解决了, ugui通用 using System.Collections;using System.Collections.Generic;using System.Linq;usi ...

  6. VUE对象数组,和普通数组的常用方法

    在VUE中也可以使用find,findIndex,map等方法对数组对象进行查询,赋值等操作,记录一下 定义数组对象 var arrobj = [{"id":1,"key ...

  7. 我的代码背叛了我?为什么 a=1, b=2,最后x和y都等于0?

    随着多核架构的普及,并发编程已成为开发者不可或缺的核心技能.在学习过程中,开发者常会遇到这样的困惑:正确编写的单线程代码,为何在并发环境下可能瞬间失效?看似有序的语句执行后,为何结果却混乱不堪?这些问 ...

  8. Golang基础笔记十六之反射

    本文首发于公众号:Hunter后端 原文链接:Golang基础笔记十六之反射 反射可以用于程序在运行时检查.修改自身类型和值,主要通过 reflect 包实现. 首先,我们提出一个需求,要打印出一个结 ...

  9. 免费的个人网站托管-GitHub Pages篇

    前情 对于前端开发来说,拥有一个自己的个人网站是一种执着也是一种排面,但是大部分前端也都对服务端这一块的东西都停留在了解阶段,但是如果正儿八经的上线一个网站或多或少需要懂一些服务端知识,需要购买服务器 ...

  10. linux机群下NFS+NIS服务的搭建以及MPICH的简单安装

    MPICH是目前应用最广泛的免费MPI系统,也是运行在大部分机群系统的MPI并行环境 MPICH的网址是:http://www.mcs.anl.gov/mpi/mpich,从此处可以下载源程序mpic ...