当前位置:   article > 正文

状态压缩DP(入门)_状态压缩dp入门

状态压缩dp入门

引入

旅行商问题:

考虑经典的TSP问题,即假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访1次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。

时间复杂度:O(n^{2}*2^{n})

二进制集合表示法

 
用数的二进制表示集合:S=(10010)_{2}   => V={1,4}

第i位表示第i个节点,第一位和第四位是1,因此V={1,4}

状态表示

dp[i][S]表示当前在节点i,已经访问过结点集合为S,所经过路径的最小权值和。用S表示集合即所谓的“状态压缩”.(只关心路过节点集合和当前节点,不记录路径)

转移方程

 

 板子:

状压dp——模板&分析&例题(存用)_cos的博客-CSDN博客

  1. for(int S = 0 ; S<(1<<n) ; S++)
  2. {
  3. for(int i = 0 ; i<n; i++)
  4. {
  5. if(S&(1<<i)){
  6. for(int j = 0; j<n; j++)
  7. {
  8. if(!(s & (1 << j)&&G[i][j])
  9. dp[j][S|(1 << j)]=min(dp[j][S|(1<<i)],dp[i][S]+G[i][j])
  10. }
  11. }
  12. }
  13. }

一些常见位运算

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/50895
推荐阅读
相关标签
  

闽ICP备14008679号