POJ2411: Mondriaan's Dream(1*2铺地砖,DP)

POJ 2411 铺地砖 状态压缩dp入门 Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 10402   Accepted: 6035 Description Squares and rectangles fascinated the famous Dutch painter 阅读详情
Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, after producing the drawings in his 'toilet series' (where he had to use his toilet paper to draw on, for all of his paper was filled with squares and rectangles), he dreamt of filling a large rectangle with small rectangles of width 2 and height 1 in varying ways. 

Expert as he was in this material, he saw at a glance that he'll need a computer to calculate the number of ways to fill the large rectangle whose dimensions were integer values, as well. Help him, so that his dream won't turn into a nightmare!

Input

The input contains several test cases. Each test case is made up of two integer numbers: the height h and the width w of the large rectangle. Input is terminated by h=w=0. Otherwise, 1<=h,w<=11.

Output

For each test case, output the number of different ways the given rectangle can be filled with small rectangles of size 2 times 1. Assume the given large rectangle is oriented, i.e. count symmetrical tilings multiple times.

Sample Input

1 2
1 3
1 4
2 2
2 3
2 4
2 11
4 11
0 0

Sample Output

1
0
1
2
3
5
144
51205
 
用2进制的01表示不放还是放
<p>第i行只和i-1行有关</p><p><pre name="code" class="cpp">#include<iostream>
#include<algorithm>
#include<string>
#include<map>
#include<vector>
#include<cmath>
#include<string.h>
#include<stdlib.h>
#include<cstdio>
#define ll long long
using namespace std;
ll dp[15][1<<11]; //表示第i行为某种状态的时候(为止)已经有多少种方法数
ll n,m,tem; //n行m列,tem表示方法数
void dfs(int i,int p,int k){ //i:第几行,p:用二进制表示的当前这一行各个位置状态,k:第几列
	if(k>=m){
		dp[i][p]+=tem;
		return;}
	dfs(i,p,k+1);
	if(k<=m-2&&!(p&1<<k)&&!(p&1<<k+1)) //如果该行连续两列都为0,则可以选择添加一个横砖
		dfs(i,p|1<<k|1<<k+1,k+2);} //p|1<<k|1<<k+1表示把该行这两个位置置1
int main(){	
	while(cin>>n>>m&&n!=0&&m!=0){
		memset(dp,0,sizeof(dp));
		tem=1;
		dfs(1,0,0);
		for(int i=2;i<=n;++i){
			for(int j=0;j<(1<<m);++j){
				if(dp[i-1][j]>0){
					tem=dp[i-1][j];
					dfs(i,~j&((1<<m)-1),0);}}} //~j&((1<<m)-1)所有位置取反
		cout<<dp[n][(1<<m)-1]<<endl;} //输出最后一行所有位置的数都是1的情况
	return 0;
}




        
POJ 2411 Mondriaan's Dream (轮廓线DP代码详解) Mondriaan’s Dream(POJ 2411) Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 18772 Accepted: 10717 Description Squares and rectangles fascinated the famous Dutch painter Piet... 阅读详情

相关推荐

分治算法设计与应用1 L型组件填图问题 棋盘问题 递归 算法

L型组件填图问题 1.问题描述 设B是一个n×n棋盘,n=2k,(k=1,2,3,…)。用分治法设计一个算法,使得:用若干个L型条块可以覆盖住B的除一个特殊方格外的所有方格。其中,一个L型条块可以覆盖3个方格。且任意两个L型条块不能重叠覆盖棋盘。 例如:如果n=2,则存在4个方格,其中,除一个方格外,其余3个方格可被一L型条块覆盖;当n=4时,则存在16个方格,其中,除一个方格外,其余15个方格被5个L型条块覆盖。 2. 具体要求 输入一个正整数n,表示棋盘的大小是n*n的。输出一个被L型条块覆盖的n*n棋盘。该棋盘除一个方格外,其余各方格都被L型条块覆盖住。为区别出各个方格是被哪个L型条块所覆盖,每个L型条块用不同的数字或颜色、标记表示。 3. 测试数据(仅作为参考) 输入:8 输出:A 2 3 3 7 7 8 8 2 2 1 3 7 6 6 8 4 1 1 5 9 9 6 10 4 4 5 5 0 9 10 10 12 12 13 0 0 17 18 18 12 11 13 13 17 17 16 18 14 11 11 15 19 16 16 20 14 14 15 15 19 19 20 20 4. 设计与实现的提示 对2k×2k的棋盘可以划分成若干块,每块棋盘是原棋盘的子棋盘或者可以转化成原棋盘的子棋盘。 注意:特殊方格的位置是任意的。而且,L型条块是可以旋转放置的。 为了区分出棋盘上的方格被不同的L型条块所覆盖,每个L型条块可以用不同的数字、颜色等来标记区分。 5. 扩展内容 可以采用可视化界面来表示各L型条块,显示其覆盖棋盘的情况。 经典的递归问题, 这是我的大代码, 只是本人很懒, 不想再优化

上海计算机学会2021年3月月赛C++乙组T3再铺地砖

存在两种规格的地砖,一种是 1×1 规格的,也就是恰好可以覆盖一个方格,另一种是 1×2 规格的。2.边界为i-2:有三种情况,一是两块1x2横放,二是一块1x2,两块1x1,1x2放上边,三同二,1x2放下边,即a[i-2]*3;a[i]=2*(a[i-1]+a[i-2]+....a[1]+1)+a[i-2],把前边的2*()变成前缀和,即可。1.边界为i-1:有两种方案,一是单块1x2,二是两块1x1.即a[i-1]*2。可以得出2*(1+a[1]+a[2]+a[3]....a[i-3])种方案。

长春高老师编程 1120

Arduino程序设计(八)LCD显示实验

本文主要介绍温度/温湿度传感器的LCD显示实验,分别是:1、LM35采集环境温度LCD显示;2、DS18B20采集环境温度LCD显示;3、DHT11采集环境温湿度LCD显示。(1)LM35介绍LM35特性特性说明基本功能LM35作为常用的温度传感器,可以检测周围的温度工作原理利用感温材料,通过内部电路将温度值转化为对应的电压信号工作电压4~30V,常用5V供电温度测量测量范围0~100℃ ,误差 ±0.5℃输出信号线性模拟信号输出,LM35输出电压和摄氏温度程线性关系。

Alice的博客 6711

铺瓷砖--状压dp

最近学了状压dp,把之前未解决的题目捋一捋。 这是之前的一道题 今天蒜头君装修新家,给家里买了一种 1×2或2×1 的长方形(如图1)新瓷砖。蒜头君是个懂得审美的人,毕竟人生除了金钱,还有诗和远方。 这个时候蒜头君就在想,这种长方形的瓷砖铺到一个 10×10 10 \times 10 10×10 的地面上有多少种方案?(如图2:是 4×44 \times 44×4 地面的一种方案) 图1:...

Bowen的博客 1821

电子产品的老化测试有哪些类型?

因此,越来越多的人在寻找“已知合格的测试连接器”,即经过测试具有可靠性和有效性的测试连接器,可以在老化测试中制定优化方法。例如对于芯片来说,不同的封装有不同的老化测试座,QFP老化测试座,QFN老化测试座等。老化测试时,专用老化电路板上的元件将承受等于或高于其额定工作条件的压力,以消除任何在额定寿命之前过早失效的元件。静态老化:在此类系统中,将测试设备安装到老化板上的插座中,然后放入老化箱中,其中每隔12至24小时施加电源和高温。动态老化:在动态老化系统中,设备以老化速度设定的最大速率进行测试。

软件技术的专栏 1839

鸿蒙【ArkTS】使用TS装饰器封装网络请求HTTP

在HarmonyOS应用开发中,通过HTTP访问网络,可以使用官方提供的@ohos.net.http模块。但是官方提供的直接使用不太好使用,需要封装下才好。这里采用TS的装饰器实现AOP效果 完成前后端接口风格的统一

weixin_60376559的博客 5610

POJ2411 状态压缩DP

POJ2411 Mondriaan's Dream 给你n*m(1矩阵,要求用1*2的多米诺骨牌去填充,问有多少种填充方法。 分析: 首先我们定义如下这种填充表示方式:如果一个骨牌是横着放的,那么它所在的两个方格都填充1.如果它是竖着放的,那么它所在的两个格子中,上面的那个填0,下面的这个填1.如下图所示:   由此可以得到断言:该矩阵的骨牌摆放方法和该矩阵的二进制表示法是一一对应的。

code 1万+

YOLO26-seg分割优化:卷积魔改 | 动态蛇形卷积(Dynamic Snake Convolution),实现暴力涨点 | ICCV2023

​​​​​​摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 217

铺砖 动态规划 DP

解题思路:首先我们定义dp[i]为i列时候铺砖的方法数,我们考虑2 * 2的时候,一共有3个方法,考虑3 * 2的时候,多出了一列,如果我们竖着直接放一个,方法数就和2 * 2时候一样,即3,也就是dp[i-1]个方法数,如果我们对3的后两列进行铺砖,我们只能横着放两个和竖着放一大个,为什么不能竖着放2个呢,因为这时候的方法数其实就和前面重叠了,所以只能加上2 * dp[i-2]。 所以得出:...

一粒大榴莲的博客 1433

改进后的yolov8导出进行部署到rk3588上时,导出为onnx格式报错aten::fft_fft2算子不支持导出...如何解决?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 1798

【JDK】win 10 / win 11:jdk 8 下载、安装、配置、验证

win10 / win 11:JDK 最新版本下载 / 历史版本下载(jdk 8)、安装、配置系统环境变量、验证安装全详细操作教程

顾三殇 —— 博客空间(软件测试) 13万+

POJ 2411 Mondriaan's Dream // 状压dp

POJ 2411 Mondriaan's Dream // 状压dp http://poj.org/problem?id=2411 突然觉得这题有丶意思,拿来写写看。(是个典型例题,用2*1砖头铺满矩形的方案数) 将一列压缩成一个二进制,就是一个状态,总共2^w*h个状态,直接dp+dfs。时间复杂度O(2^w*h)。 转移的时候,已知前一行满,将当前列填满,这样转移就行了。 ...

Rshs 315

C#函数返回多个值实现实例

本文实例讲解C#函数返回多个值多种实现方法。

qq_30725967的博客 1170

poj 2411 Mondriaan's Dream 轮廓线dp

题目链接: http://poj.org/problem?id=2411 题目意思: 给一个n*m的矩形区域,将1*2和2*1的小矩形填满方格,问一共有多少种填法。 解题思路: 用轮廓线可以过。 对每一个格子,枚举上一个格子的状态,得到当前格子的所有状态值。 dp[cur][s]表示当前格子的轮廓线状态为s的情况下的总数 代码: #include #include #incl

cc_again的专栏 2681

Android16 动态隐藏systemUI右侧音量条

本文介绍了如何屏蔽SystemUI系统音量条并显示自定义音量控制条的实现方法。主要通过两个步骤:1)在编译脚本中定义控制属性persist.rp.show.volume.dialog=off来隐藏系统音量条;2)修改SystemUI源码中的VolumeDialogImpl.java文件,在showH方法中根据属性值判断是否显示系统音量条。当属性值为off时直接return,从而屏蔽系统音量条的显示,实现自定义音量控制条的替代显示。该方法通过系统属性控制显示状态,具有灵活可控的特点。

tzj1058756809的博客 779

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

poj2411 Mondriaan's Dream 插头dp做法

Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 11379   Accepted: 6610 Description Squares and rectangles fascinated the famous Dutch pai

smz436487的专栏 556

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【状压DP】POJ 2411 Mondriaan's Dream

POJ 2411 Mondriaan's Dream 题意:给一个n*m大的区域,问用1*2的矩形块填充,能够刚好填满的填充方式有多少? FEELING:真的吹爆神犇!!www,这个方法也太巧妙了叭qaq!!!! 大神思路蒟蒻理解: dp[i][s]: 第 i 行状态为s的种类数(保证前i - 1行是全部覆盖的) 我们用01表示(i , j)格子有没有被覆盖,那么每一行都会有一个01串...

L_X_ 208

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

POJ 2411 Mondriaan's Dream 解题报告

POJ 2411 Mondriaan's Dream 解题报告2 与1不同的是,没用dfs,纯dp 思路是: 用0表示没放,1表示放了。横放则左右两格都是1,竖放则上格是0,下格是1。 这种记录state的方法决定了:如果上下两行的state是确定的,那么放法唯一。 Fun(state,n)表示n这行的状态是state的时候有多少种放法。 那么我们要求的就是Fun(2^m...

deng530557273的博客 284

[POJ2411] Mondriaan's Dream 状压dp

[POJ2411] Mondriaan’s Dream 状压dp原题:POJ2411**题意:**N*M的矩阵,用1*2的砖铺,要求不能超出边界并且铺满所有格子,问有多少种铺法?(1<=N,M<=11)(1 <= N, M <= 11)。题解: 砖铺问题。 用dfs写法写无脑的一匹。。。 从左上处理格子,当处理到(i,j)(i, j)格子时,所需要的只有该行和上一行格子的状态(是否有砖),使用

chbug的博客 463

[poj P2411] Mondriaan's Dream

[poj P2411] Mondriaan's Dream Time Limit:3000MS Memory Limit:65536K Total Submissions:18023 Accepted:10327 Description Squares and rectangles fascinated the fa...

a8233821的博客 187

[poj 2411] Mondriaan's Dream{状态压缩DP}

题目 http://poj.org/problem?id=2411 解题思路 代码 #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; using namespace std; int n,m; long long f[12][1&lt;&lt;11]; bool s[1&lt;&lt;11]; ...

Nowed 435

Mondriaan's Dream POJ - 2411 (状压DP)

题目链接: Mondriaan's Dream POJ - 2411 题目大意:就是给你一个n*m的矩阵,然后问你用2*1的矩阵和1*2的矩阵,有多少种方法能凑出来n*m的矩阵,在不会有重叠的前提下。 具体思路:状压dp,对于1*2的矩阵,我们将这个方块构成的两块都标记为1;对于2*1的矩阵,我们将上面那个方块标记为0,下面那个方块标记为1.然后在具体判断的过程中,先判断第一...

diaomeijiao3430的博客 141

【poj2411】Mondriaan's Dream 状态压缩dp

AC传送门:http://vjudge.net/problem/POJ-2411 【题目大意】 有一个W行H列的广场,需要用1*2小砖铺盖,小砖之间互相不能重叠,问有多少种不同的铺法? 【题解】 对于每一行有w个位置,所以每一行都有0~2w-1种状态。 对于当前行的状态s,它是由前一行的状态s’转化过来的,显然,对于该行某个位置j: 如果前一行该位置为0,那么该位置可...

anzhi7214的博客 146

POJ2411——Mondriaan's Dream

Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 12042   Accepted: 7011 Description Squares and rectangles fascinated the famous Dutch painter

Alex 770

poj2411 Mondriaan's Dream 状压DP

Mondriaan's Dream Time Limit:3000MS Memory Limit:65536K Total Submissions:22073 Accepted:12368 Description Squares and rectangles fascinated the famous Dutch painte...

weixin_30895603的博客 122

POJ 2411 Mondriaan's Dream【状压DP】

题意:给你一个n*m的矩阵,让你用1*2的矩形覆盖全部,问你方案数。 思路:我们可以发现,每个小矩形有两种放置方式,横着放和竖着放,我们设dp[i][s]表示第i行状态为s时的方案数。 当当前位为1表示当前位置是竖着放置的矩形的上半部分,0则表示其他情况。那么对于当前行某个状态s,我们从上一行的某个合法状态p转移过来,那么什么状态算是合法的呢? 1. s & p == 0 这样保...

独钓门前月 324
上一篇: 【codechef】Devu and his Class(巧妙的 模拟,分类讨论)
下一篇: zoj 3865 Superbot (广搜)
ccyy-
博客等级 码龄12年 31粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值