状态压缩DP总结

参考博客:https://blog.csdn.net/accry/article/details/6607703

状态压缩主要指的是用位运算代替枚举压缩DP的时间,如果某一个状态和之前状态的顺序没有关系,那么就可以将之前的选或者不选压缩到一个二进制数中。在选择第i个时枚举之前的所有可能的i-1状态,但是这i-1状态是不记录顺序的,只在i-1到i时考虑顺序,这样的话往往能够节约很多时间。

【POJ3311】Hie With The Pie

大致题意是从原点出发送披萨到n个点{pi},给了pi直接到pj的时间,求送一遍再回到原点的最短时间(每个点可以走无数次)。但是有可能绕一段路比直接去时间更短,这就需要预处理一下找到pi到pj的最短时间,因为点的个数比较少所以O(n^3)也不会超时。具体的代码没有写过,看了一下题目和题解,觉得这题还是挺经典的。想法很简单,每一个子状态就是现在所在的点和之前到过的点,用一个二进制数来表示,然后枚举在这个点之前最后到的是哪一个点,求出最短的时间。然后一些位运算的小技巧也是需要注意的:dp[S][i] =min(dp[S^(1<<(i-1))][j] + dis[j][i],dp[S][i]);用异或来表示除了i没有走过其他都和S相同的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值