洛谷原题链接: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. Edu-English-Phonetic-IPA:国际音标发音学:英语音标的学习神器,终于找到

    https://mp.weixin.qq.com/s?__biz=MzU3NTIzOTA5OA==&mid=2247493736&idx=1&sn=8ed10241adeaa1 ...

  2. java中如何处理夏令时?

    在国际化的项目中,处理时间时经常会遇到夏令时(BST,British Summer Time)问题,发明夏令时(以及冬令时)主要是为了省电.   冷知识:中国历史上也曾经采用过(1986-1991)夏 ...

  3. Linux下查看Mysql数据库端口的方法-九五小庞

    mysql 默认的端口是 3306,但是如果在安装的时候,修改了mysql的默认端口的话,可以采用以下方式查看 第一种方法: 直接查看数据库的配置文件 在/etc/mysql/my.cnf(Linux ...

  4. Argo CD持续交付工具部署

    介绍 Argo CD 是一款适用于 Kubernetes 的声明式 GitOps 持续交付工具. 架构 Argo CD 是作为一个 Kubernetes 控制器来实现的,它能持续监控运行中的应用程序, ...

  5. PostgreSQL 分区最佳实践

    概述 分区的本质是将一张大的物理表从逻辑上拆分,为 N 个较小的物理表. 分区表按照官方的解释如下: The partitioned table itself is a "virtual&q ...

  6. HiPreNets:通过渐进式训练实现高精度神经网络

    HiPreNets:通过渐进式训练实现高精度神经网络 深度神经网络是解决科学与工程中非线性问题的强大工具,但随着问题复杂度的增加,训练高精度模型变得极具挑战性.非凸优化和大量待调超参数使得性能提升困难 ...

  7. 《AI-Assisted Programming》读后感

    一. 为什么读这本书? 1.想了解如何更好地利用 AI 工具来辅助编程. 在我日常的工作中,常使用 ChatGPT 和 DeepSeek 来辅助编程.当然,方式比较简单与直接,就是将问题丢给它们,然后 ...

  8. 【Spring】IOC容器到底是咋肥事啊?

    菜瓜:网上整天说的IOC容器是个啥啊? 水稻:IOC?就是Inversion of Control,控制反转啊 菜瓜:soga,原来是控制反转啊,我知道了!你这不是等于白说吗? 水稻:别急,听我慢慢说 ...

  9. 支付宝小程序IDE突然极不稳定

    前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,公司项目就是主推uni-app,因公司项目是快抖微支 ...

  10. rest-framework之APIView基本使用及源码分析、Request类源码分析、序列化组件介绍及基本使用、反序列化

    安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面安装 方式三:pycharm命令行下安装(装在当前 ...