铺瓷砖 状压dp经典问题

蓝桥杯-试题 算法训练 瓷砖铺放-c++递归 瓷砖铺放 题目 资源限制时间限制:1.0s 内存限制:512.0MB 问题描述   有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法? 例如,长度为4的地面一共有如下5种铺法:   4=1+1+1+1   4=2+1+1   4=1+2+1   4=1+1+2   4=2+2    ... 阅读详情

题意

给出 n×m的矩形方块,可以往上面铺1×2的砖块,问铺满这个方块的方案有多少种。

题解

砖块可以竖铺和横铺,竖铺的话会影响到下一行,横铺的话不会影响到下一行,这里我们令 1:表示该方块不会影响下一行,0:表示该方块会影响下一行。

条件一:
考虑(i.j)这一格,如果(i-1,j)上是0,那说明(i-1,j)是竖铺的砖块,那么(i,j)便是1,该点不会影响到下一行了。若(i-1,j)是1,那么(i,j)可以是0也可以是1。从而可以得知(i,j) | (i-1,j) = 1。

条件二:
只有这个条件还是不够的,因为一旦(i-1,j)是横铺的话,那么(i-1,j+1)也是1,现在考虑初始状态,001100,因为第一行是不会有上一行影响他的,所以如果该点时1那么其必定是横铺。根据横铺的性质,必定有两个连续的1,所以我们可以得出第一行合法的状态有哪些。例如010101便是不合法的。

得出了第一行合法的状态后,枚举第二行的状态,首先要满足的便是条件一,其次考虑条件二,因为第二行是会受上一行影响的,所以如果第二行出现(i,j)出现1那不一定是横铺的砖块,因为如果上一行是(i-1,j)是0的话,那么(i,j)已经被覆盖了且不会影响下一行。

仔细观察的话可以发现。如果(i-1,j)是1同时(i,j)也是1的话那么该处一定是横铺。所以只需两行状态相与(&)为1的点便是横铺,然后便可以判断是否合法(这里有个优化的地方,便是可以预处理出合法的状态有哪些)。

最终一行的答案必须全是1,因为其没有下一行可以影响了。

代码

#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
int n,m,mark[1<<11];
int dp[105][1<<11];
void init() {
    for(int i = 0; i < (1<<m); ++i) {
        int k = i;
        bool flag = true;
        while(k) {
            if(k&1) {
                k >>= 1;
                if(!(k&1)) {
                    flag = false;
                    break;
                } 
            }
            k >>= 1;
        }
        if(flag) 
			dp[1][i] = mark[i] = 1;
    }
}
int main() {
    scanf("%d%d", &n, &m);
    if(n < m) swap(n,m);
    init();
    int tot = (1<<m);
    for(int i = 2; i <= n; ++i) {
        for(int j = 0; j < tot; ++j) {
           	for(int k = 0; k < tot; ++k) {
                if((j|k) != tot-1) continue;
                if(!mark[j&k]) continue;
                dp[i][j] = (dp[i][j]+dp[i-1][k])%mod;
            }
        }
    }
    cout << dp[n][tot-1] << endl;
    return 0;
}
Leetcode 1240:铺瓷砖(超详细的解法!!!) 你是一位施工队的工长,根据设计师的要求准备为一套设计风格独特的房子进行室内装修。 房子的客厅大小为 n x m,为保持极简的风格,需要使用尽可能少的 正方形 瓷砖来铺盖地面。 假设正方形瓷砖的规格不限,边长都是整数。 请你帮设计师计算一下,最少需要用到多少块方形瓷砖? 示例 1: 输入:n = 2, m = 3 输出:3 解释:3 块地砖就可以铺满卧室。 2 块 1x1 地... 阅读详情

相关推荐

蓝桥杯经典铺瓷砖问题:状态压缩DP解法详解

状态压缩动态规划(状压DP)是解决棋盘覆盖、摆放等组合优化问题的核心算法思想。其原理在于将每一行的覆盖情况编码为一个二进制整数,从而将高维状态空间压缩为有限的状态集合,并通过预处理枚举合法状态转移,将指数级复杂度降为多项式级。该技术在算法竞赛和工程优化中价值显著,尤其适用于解决如铺瓷砖、多米诺骨牌覆盖等具有后效性的网格填充问题。本文以蓝桥杯经典试题“2xN铺瓷砖”为具体应用场景,深入剖析如何运用DFS进行状态转移预处理,并实现高效的C++解决方案,帮助读者掌握**深度优先搜索**与**动态规划**结合解决复

weixin_33462927的博客 339

试题 算法提高 瓷砖铺放 增强

试题 算法提高 瓷砖铺放 增强 资源限制 时间限制:3.0s 内存限制:256.0MB 问题描述   给了一nxm的方格,用1x3的瓷砖铺满,请问有多少种铺法。瓷砖可以旋转。 输入格式   输入的第一行包含两个整数,n, m。 输出格式   输出一个整数,表示总的铺法数。这个数可能很大,请输出对65521取余的结果。 样例输入 3 3 样例输出 2 数据规模和约定   对于100%的数据,1<=n<=10^15,1<=m<=9。 #include<bits/stdc++.h

qq_46022580的博客 1666

题解-铺瓷砖

题解-铺瓷砖DescriptionInputOutputa解析讲解状压DP运算符题目分析代码部分 Description 今天小信装修新家,给家里买了一种 1×2的长方形(如图1)新瓷砖。小信是个懂得审美的人,毕竟人生除了金钱,还有诗和远方。这个时候小信就在想,这种长方形的瓷砖铺到一个 n×m 的地面上有多少种方案(如图2:是 4×4 地面的一种方案)? Input 输入两个整数 n,m,(1≤M...

Ampty36的博客 1365

东方博宜1367 - 骨牌铺方格

有 1×n(n≤50)的一个长方形,用 1×1、1×2 和 1×3 的骨牌铺满方格,请问有多少种铺法?例如当 n=3 时为 1×3 的方格。此时用 1×1 、1×2 和 1×3 的骨牌铺满方格,共有四种铺法。

kuaidihezi的博客 1937

铺瓷砖问题 (状态压缩动态规划) (一)

题目地址:http://poj.org/problem?id=2411 问题简单描述: 在一个N行M列的格子里,我们现有1*2大小的瓷砖,可以横着或者竖着铺。问一共有多少种方案,可以将整个N*M的空间都填满。 示例: N=2 ,M=4 一共5种方案 N = 2,M = 3; 一共3种方案 问题分析: 1. 因为每块瓷砖的面积是2,所以总面积M*N必须是偶数才能铺满。如果是......

Phill King的专栏 9096

铺瓷砖—C++

Description 今天小信装修新家,给家里买了一种 1×2的长方形新瓷砖。小信是个懂得审美的人,毕竟人生除了金钱,还有诗和远方。 这个时候小信就在想,这种长方形的瓷砖铺到一个 n×m 的地面上有多少种方案 Input 输入两个整数 n,m (1≤MIN(n,m)≤10, 1≤MAX(n,m)≤100)。 Output 输出方案总数(最后结果模 10^9 + 7)。 Sample Input ...

fajin152的博客 7963

动态规划:铺砖问题

问题描述:给定n*m的格子,每个格子被染成了黑色或者白色。现在要用1*2的砖块覆盖这些格子,要求块与块之间互相不重叠,且覆盖了所有白色的格子,但不覆盖任意一个黑色格子。求一共有多少种覆盖方法,输出方案数对M取余后的结果。 限制条件: 1 &lt;= n &lt;= 15 1 &lt;= m &lt;= 15 2 &lt;= M &lt;= 10^9 样例输入: n = 3 m = 3 ...

帅比王的博客 5468

ESP32 DMX512与RDM协议栈开发指南

DMX512-A是专业灯光控制领域广泛采用的串行通信标准,基于RS-485物理层实现确定性单向数据传输;RDM(Remote Device Management)则在其基础上扩展双向、可寻址、可配置的智能管理能力,满足现代舞台设备远程固件升级、自动发现与参数配置需求。二者共用同一总线但时序与帧结构严格隔离,对硬件定时精度、中断响应延迟及电气隔离提出极高要求。在嵌入式实践中,ESP32凭借Wi-Fi/蓝牙连接能力与丰富外设资源,成为构建低成本智能DMX节点的理想平台。esp_dmx协议栈正是面向该场景的高性能

weixin_34945060的博客 316

专题·状态压缩[【including Hamilton,铺瓷砖,玉米田

初见安~:)这里是理解了好久终于扯岑头了的一个因状压DP而融会贯通的一个知识点—— 状态压缩 先大概介绍一下吧——所谓状态压缩,即原本我们用一个二维数组,现在拥有一个一维的来表示,其中的每一行用一个int类型的二进制数来表示。这是压缩。 用二进制数表示,不仅节省空间而且比较节省时间——二进制的话就类似于一个对电脑底部原始数据的操作,与之对应的位运算操作(详见位运算基础)亦是如此,直接操作。而...

樱狸✨愿携清风归来处 835

(ZOS-API)Matlab控制ZEMAX软件调整光学系统某镜面位姿

所用软件的版本:MatlabR2022a, Zemax OpticStudio2024R1交互扩展功能,Zemax和可以同时打开,操作会比较方便在ZEMAX软件中,调整次镜位置通常有两种方法:1.在次镜前后各添加一个坐标间断面,并修改其“偏心X”“偏心Y”等参数来调整次镜的位姿;2.或者直接在次镜属性选项中设置相关数值。这两种方法对Zernike系数的采集结果无显著影响。

ecilifurt的博客 911

文华财经公式编程:麦语言简介及基础语法

文华财经公式语言(麦语言)是一种专门用于金融领域的编程语言,它是由文华财经公司开发的。提供了丰富的金融计算函数和数据处理功能,可以用于金融市场的数据分析、模型建立和交易策略的开发。例1:A:CLOSE;// 定义变量A为收盘价(盘中k线没有走完的时候A为最新价)。例2:MA5:=MA(C,5);// 定义收盘价的5周期均线(C为CLOSE简写)。例3:A:=REF(C,1);// 取得前一根k线的收盘价。

超哥量化的博客 1万+

铺瓷砖--状压dp

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

Bowen的博客 1821

STM32L452与FPGA通信翻车?手把手教你关闭I2C时钟延展避坑(附OVR错误解决方案)

本文深入解析STM32L452与FPGA在I2C通信中因时钟延展功能导致的常见问题,提供关闭I2C时钟延展的详细配置方法(NOSTRETCH模式),并针对可能出现的OVR错误给出Combined模式解决方案。通过实战案例和波形分析,帮助工程师快速排查和解决嵌入式系统中的I2C兼容性问题。

e3f4g5的博客 214

铺瓷砖

铺瓷砖 Description 今天小信装修新家,给家里买了一种 1×2的长方形(如图1)新瓷砖。小信是个懂得审美的人,毕竟人生除了金钱,还有诗和远方。这个时候小信就在想,这种长方形的瓷砖铺到一个 n×m 的地面上有多少种方案(如图2:是 4×4 地面的一种方案)? Input 输入两个整数 n,m,(1≤MIN(n,m)≤10, 1≤MAX(n,m)≤100)。 Output 输出方案总数(最...

Konnyaku 1493

VSCODE编辑+EIDE插件调试+STM8_Debug插件调试+IAR_STM8工具链编译开发项目

1. 安装 在VS CODE安装EIDE、STM8-Debug插件 2. 使用 EIDE 创建一个 8/16 Bit MCU 项目 新建虚拟文件夹,把工程外部的文件添加进虚拟文件夹,实现工程和源文件之间的关系,而不用实际把源文件复制到工程目录下。 EIDE工程和源文件实现分开放置,EIDE(EIDE工程)、EWSTM8(IAR STM8工程)、Project(ST Visual Develop工程) 选择工具链 烧录工具选择 头文件包含目录 添加宏定义 3. 编译 4. 使用STM8

TrueLink的博客 5500

大疆RoboMaster嵌入式面试,电机FOC调不出来当场走人

摘要:大疆RoboMaster嵌入式工程师面试以实战能力著称,重点考察FreeRTOS任务调度、FOC电机控制和CAN总线三大核心技能。FreeRTOS部分涉及优先级调度、栈溢出排查及信号量与互斥锁的区别;FOC控制要求现场编写电流环代码,并解释Clarke/Park变换原理;CAN总线则关注仲裁机制、CANopen协议应用及错误帧排查方法。面试强调工程实践,需具备STM32开发经验,建议搭建实际环境进行练习。该岗位被誉为"硬件版修罗场",充分体现大疆对实际开发能力的严格要求。

郑伟强dev的专栏 150

我是一名铺砖匠——铺砖问题汇总(DP)

鉴于多次遇到铺砖问题,因此目前遇到对此类问题进行总结: 铺砖问题主要分类: 1.简单的一维铺砖问题 2.二维铺砖问题 2*1的砖是否可以铺满N*M的地面 3.二维铺砖铺满有多少种方法 a.2*1的砖铺满2*M的地面有多少种方法? b. 2*1的砖铺满N*M的地面有多少种方法? 『...

Miserable_ccf的博客 9683

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理精讲,阐述滑模观测器核心思想和PLL的作用;2)系统架构全景图展示;3)Simulink建模全流程,从基础FOC框架到SMO和PLL模块的实现;4)关键参数整定指南和工程实践要点;5)仿真结果分析及常见问题解决方案。该方法可有效替代机械传感器,降低成本并提高可靠性,适用于空调压缩机、电动汽车水泵等工业场景。文章还提供了详细的调试建议和动手实践指导。

MHD0815的博客 83

蓝桥国赛训练营:铺瓷砖(状压dp)

题面:给出一种 1x2的瓷砖和n * m的地板,问铺满整个地板有几种方案?答案对 1e9+7求余。 1 <= min(n,m) <= 10 , 1 <= max(n,m) <= 100; 二维状压dp 思维过程: 首先想到一行怎么铺,可以用1表示竖着,0表示横着。有了表示的方法,根据状压dp,我们可以把一行的状态压缩成一维,令dp[i][j] 表示 第i行,铺的方案为...

qq_41997978的博客 721

基于 STM32 的便携式肌电信号采集与疲劳度评估系统设计与实现

本系统以 STM32 单片机为核心控制器,通过肌电电极采集人体骨骼肌表面的 sEMG 信号,经仪表放大、滤波、AD 采样后送入 MCU 进行时域 / 频域特征提取,利用 RMS(均方根)、MPF(中位频率)、MF(平均频率)等指标实时评估肌肉疲劳状态,最终通过 OLED 显示疲劳等级,并支持蓝牙上传至上位机。

weixin_42300449的博客 103

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[状压dp][铺瓷砖] Mondriaan's Dream

Mondriaan's Dream 原题链接 Description 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 to...

cp0328的博客 3614

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

瓷砖铺放 (状压DP+矩阵快速幂)

由于方块最多涉及3行,于是考虑将每两行状压起来,dfs搜索每种状态之间的转移。 这样一共有2^12种状态,显然进行矩阵快速幂优化时会超时,便考虑减少状态。 进行两遍bfs,分别为初始状态可以到达的状态,和可以到达终止状态的状态。 同时出现在两次bfs中的状态即为有效状态,一共有141种。 这样就可以跑出来了。 未加矩阵快速幂 50分 1 const dx:arra...

aekijekzn484879763的博客 254

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

铺砖问题(状压dp)

感受: 一直把《挑战程序设计竞赛》奉为神作,写的真是太好了,超级给力。可是去年看了一周的状压dp,只是对旅行商问题有一点感觉,铺砖问题更是一脑袋浆糊,学的太吃力了,无奈放弃了。今年突然心血来潮,又学了一波,无奈还是卡卡卡到铺砖问题,原来书上的解法是没见过的轮廓线动态规划解法,真是被搞得不要不要的,好气!!! 博客:在此表示深深的感谢~ 状态压缩动态规划 POJ 2411 (编程之美-瓷砖覆盖地...

ó 1951

EOJ 3297. 铺瓷砖【斐波拉契数列的变式+记忆化搜索/DP】⭐⭐⭐⭐⭐

文章目录题目描述知识点实现码前思考代码实现码后反思 题目描述 铺瓷砖 单点时限: 2.0 sec 内存限制: 256 MB 章鱼王的行宫要铺瓷砖了。  行宫中有一长度为 的地板,给定三种不同瓷砖:一种长度为1,一种长度为2,另一种长度为3,数目不限。 要将这个长度为 的地板铺满,并且要求任意两个相邻的瓷砖长度均不等,一共有多少种不同的铺法?在所有的铺设方法中,一共用了长度为1的瓷砖多少块?   例如,长度为4的地面一共有如下3种铺法,并且,一共用了长度为1的瓷砖4块:   4=1+2+1 .

yc_cy1999的博客 520

2016-8-5夏令营总结(状压DP)

今天我们在夏令营主要学习了状压DP的知识。 状压DP是指把DP状态从多维压缩到少维,通常使用二进制的01表示是否操作。

周正华的博客 416
上一篇: CSL的训练计划(拓扑排序)
下一篇: 上下界网络流 (更新中)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值