状态压缩的动态规划

状态压缩的动态规划,简称状压DP,是一种将DP和枚举结合起来的方法,可以说是枚举的一种巧妙的优化。
简单来说,如果我们能够划分状态,但是很难继续细分(或者说是状态中的元素都彼此有关,但没有明显的规律),比如说可以将方阵按行划分,但是每行中的每个元素间都有一定的关系时,就可以枚举每一行的状态,再进行DP。也就是说,将状态的表示也作为DP状态表示的一(或几)维,然后相应的进行转移。这真是一个革命性的想法,不仅消除了纯枚举/搜索的效率问题,而且也没有那么难写(相比起一些较复杂的DP来说),应该说是相当不错的。
一般来说,状压DP的代码是这样的:

//枚举DP转移方程的状态
    //枚举要转移到什么状态
        //转移并更新

当然,有的时候枚举的状态中的合法状态相当少,特别是在限制很多、很严的时候,这时我们就为了效率,不会采取直接枚举状态的方法,而是产生状态,如果单个状态本身也有一些约束的话,那么也会相应的缩减状态数,于是这两大利器就成为了改善状压DP的两大方法。
当然,状压DP最难写的还是位运算,所以还是要掌握好一定的位运算基础才行了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值