轮廓线 dp

轮廓线 dp 是一种和插头 dp 基本相同的东西,所以先看一下轮廓线 dp。

Tiling Dominoes#

与状压 dp 不同的是,轮廓线 dp 是通过逐格转移来进行 dp 的。我们用三维 fi,j,k 来表示 dp 状态。其中,i,j 表示当前进行到 (i,j) 这个格子,k 表示轮廓线状态。具体的,在下面的情况中,k=(11001001)2

回到题目。

  • 当这个格子被覆盖了,也就是 k 的第 j 位为 1 时,我们不能在格子上放任何多米诺骨牌。k 的第 j 位变成 0
  • 当这个格子没有被覆盖,也就是 k 的第 j 位为 0
    • 我们可以竖着放。k 的第 j 位变成 1
    • k 的第 j1 位之前选择的是竖着放的时候,说明本来 j1 是空闲的。我们可以把这个多米诺骨牌横过来。k 的第 j1 位变成 0
    • 这里我们没有暂时空闲的情况,因为暂时空闲给下一个格子放横的骨牌的情况已经被处理过了。

​ 时间复杂度 O(nm2m)。这里转移是 O(1) 的,这也是轮廓线 dp 的优势。

Guards In The Storehouse#

这道题难点主要在于 dp 状态的设计和繁琐的转移。转移不多叙述。

fi,j,k,x,y 表示当前在 (i,j) 格子,当前 m 列每一列是否被占用的状态为 k,这一行有没有被占用的布尔值为 x,空一格的机会是否被使用的布尔值为 y

作者:DE_aemmprty

出处:https://www.cnblogs.com/aemmprty/p/18090236

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   DE_aemmprty  阅读(110)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示