题解-铺瓷砖

这篇博客介绍了一个关于如何使用状态压缩动态规划(状压DP)来解决铺1×2瓷砖到n×m地面的方案数问题。博主通过讨论运算符的使用,如与(&)、或(|)、异或(^)、非(!),并提供了题目分析和代码实现,解释了如何判断横铺和竖铺的状态,并避免DFS导致的超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

今天小信装修新家,给家里买了一种 1×2的长方形(如图1)新瓷砖。小信是个懂得审美的人,毕竟人生除了金钱,还有诗和远方。这个时候小信就在想,这种长方形的瓷砖铺到一个 n×m 的地面上有多少种方案(如图2:是 4×4 地面的一种方案)?

Input

输入两个整数 n,m,(1≤MIN(n,m)≤10, 1≤MAX(n,m)≤100)。

Outputa

输出方案总数(最后结果模 10^9 + 7)。
Sample Input 1
2 2
Sample Output 1
2

解析讲解

这道题的数据与题干很明显就会联想到状态压缩(或状压DP)。

状压DP

状压DP实际就是暴力枚举,时间空间消耗少,将状态压缩存进int类型中,比如可以处理一些麻烦的题,细节麻烦的问题中。用例子来讲,01背包i,j就是时态的个更新,主要的还是二进制的问题,‘0’表示不选,‘1’反之。连成串后再转成十进制数。

运算符

在之前写过一篇运算符的概括,单目运算符,双目运算符,三目运算符都有,大家可一去看一下:https://blog.youkuaiyun.com/ebirth/article/details/96591827
对于状压DP,这还是把运算符都列举出来:

&       与运算   
|       或运算   
^       异或运算   
!      非运算(求补)   
>>      右移运算   
<<      左移运算   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值