AtCoder Beginner Contest 204 F Hanjo 2

博客探讨了如何解决在H×W二维平面上使用1×1和2×1地砖铺满空间的问题,其中W可能非常大。关键点是采用矩阵快速幂优化的动态规划方法,通过定义特定状态来避免复杂的状态转移。博客提到了如何构造状态转移矩阵,并通过递归函数处理1×1和1×2地砖的不同放置情况,确保不重复计算方案数。
摘要由CSDN通过智能技术生成

AtCoder Beginner Contest 204 F Hanjo 2

H宽,W长的二维平面上,用1 * 1或者2 * 1的地砖来铺,要求铺满,求出方案数。
数据范围H <= 6, W <= 1e12

看到W的范围就可以想到是一个矩阵快速幂优化的dp转移,问题的关键是如何写出dp的方程以及矩阵的构造。

这里题解的巧妙在于状态的定义,因为不好处理1 * 2的地砖横着摆的情况,因为这会跨两行,我开始以为会有2^12,也就是枚举两行的状态。不过这里状态的定义是当前行的二进制状态压缩,并且要保证前一行是已经塞满的情况。所以在构造状态转移矩阵的时候,也就是从当前的状态 d p [ i ] [ S ] dp[i][S] dp[i][S]转移到状态 d p [ i + 1 ] [ T ] dp[i+1][T] dp[i+1][T]的时候,是要搜索找到当前的状态,也就是S,在加入一些1 * 1和1 * 2的地砖之后变为全1的状态,这时候所对应的T就是 d p [ i + 1 ] [ T ] dp[i + 1][T] dp[i+1][T]

而转移矩阵 t r a n [ S ] [ T ] tran[S][T] tran[S][T]则是从 d p [ i ] [ S ] dp[i][S]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值