状态压缩DP之位运算总结

介绍

  在进行DP题目分析时,针对状态或子状态可以抽象为 0 1 排列组合的题目时,将其 0 1 序列转化为二进制数,再而转换为十进制数,可以更加便捷的对其进行数据分析处理,减少因为混乱所造成的一些不必要的错误。魔鬼往往藏在细节之中。

常用运算符(都是十进制数在二进制下所做的运算,返回十进制的值)

  1. & : X&Y ,与运算, 全1才为1,3(11)&2(10)=2(10)  。
  2. |  : X|Y ,或运算,有1即为1  , 3(11)|2(10)=3(11)  。
  3. ^ : X^Y ,异或运算,不同即为1 , 3(11)^2(10)=1(01)  。
  4. << : 左移运算符 , X<<Y ,相当于 X*(2的Y次方)   。
  5. >> : 右移运算符 , X>>Y ,相当于 X/(2的Y次方)   。

常用操作(大多都是根据所想要的推公式)

  1. if(sta[i] | Y!=Y)  //判断 sta[i] 状态是否合法
  2. if(sta[i]&Y==0)       //判断 sta[i]与Y是否右重叠
  3. …………
posted @ 2018-03-12 00:35  逃往火星的猫  阅读(216)  评论(0编辑  收藏  举报