【状压DP+高精】【cofun1370】走道铺砖问题

该博客介绍了如何使用状态压缩动态规划(DP)和高精度算法来解决一个走道铺砖问题。问题要求计算在给定尺寸的走道上用1×2规格的地板砖铺满的方案总数。博客提供了输入输出格式、示例及分析,指出由于最小尺寸不超过12,可以采用状压DP方法,并给出了DFS转移的思路。同时,博客还提及了与该问题相关的另一道题目,【cofun1371】 Mondriaan’s Dream,虽然它不要求高精度,但需要判断n和m是否为偶数。
摘要由CSDN通过智能技术生成

【cofun1370】走道铺砖问题

Description
有一个专门为装修设计方案的设计师。在某一天,他接到了一个项目,为一栋正在修建的大楼设计走道的地板铺设方案。此项目的委托人事先便进行了说明:地板砖只有1×2一种规格,而整栋楼中同类走道又有许多个,他不想其中有任何的两个出现重复的设计方案。因此,设计师必须确定其可行性,即对于一个N×M(N×M为偶数)的走道,用N×M/2块1×2的地板砖将其铺满,可以有多少种不同的设计方案,如果方案总数少于此类走道的个数,则该项目边不可能实现。
现在,他需要这样一个程序:对于输入的走道规格N、M,计算出可以设计出的不同方案总数(不要求本质不同)。

Input Format
输入文件仅一行,有两个数N、M,表示走道的规格。
Output Format
输出文件也只有一行,即得出的方案总数。

Sample Input
3 4
Sample Output
11

Hint
由于是走道,所以N和M中将会有一个较小。其中min{N,M}≤12,1≤N、M≤40,且N×M为偶数。


  • 分析 :
    • min{N, M} <= 12, 因此考虑状压DP。
      这题不是棋盘问题了,而是覆盖问题。
      但我们可以用类似的思想考虑:
      ①由于搬砖1 * 2,当前行仅与上一行相关联。
      ②dfs出每行的覆盖情况,把当前行和上一行压成二进制分别存在数组t,g中。(0:未覆盖/ 1:已覆盖)
      ③枚举每行进行状压DP,转移方程:
    f[i][t[j]] = f[i][t[j]] + f[i - 1][g[j]];

f[i][t[j]]:到了第i行,当前行状态为t[j]。

注意:由于数据大,需要运用高精度。
【这题的dfs转移本po理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值