【算法】状压DP-2

介绍

介绍

状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的状态必须只有两种,0 或 1;当然如果有三种状态用三进制来表示也未尝不可。
状态压缩DP:顾名思义,就是用状态压缩实现DP。
不过呢,对于装压DP来说,不一定是二进制。

状压DP主要分为集合式和棋盘式,本文只讨论棋盘式。
集合式点这里

例题

这里

总结

对于棋盘式的状压DP,有几种思考方式。

  1. 每行每行考虑,逆推DP。
  2. 每列每列考虑,逆推DP。
  3. 每个格子每个格子考虑,顺推DP。
  4. 每个格子每个格子考虑,dfs顺推。
  5. 同时考虑两行,三维DP,适用于类似炮兵阵地的题目。
  6. 考虑三进制状态压缩,如炮兵阵地的解法 2 2 2
  7. 对于三维DP,有可能炸空间,可以考虑滚动掉一维。

记住

  1. 再三检查空间复杂度。
  2. 检查时间复杂度。
  3. 检查输入时的下标和枚举时的下标是否匹配。
  4. 检查各种位运算的优先级是否有冲突,该加的括号一定要加。
  5. 检查状态的定义和输出。
  6. 检查for的枚举顺序。
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值