状态压缩DP之位运算总结
介绍
在进行DP题目分析时,针对状态或子状态可以抽象为 0 1 排列组合的题目时,将其 0 1 序列转化为二进制数,再而转换为十进制数,可以更加便捷的对其进行数据分析处理,减少因为混乱所造成的一些不必要的错误。魔鬼往往藏在细节之中。
常用运算符(都是十进制数在二进制下所做的运算,返回十进制的值)
- & : X&Y ,与运算, 全1才为1,3(11)&2(10)=2(10) 。
- | : X|Y ,或运算,有1即为1 , 3(11)|2(10)=3(11) 。
- ^ : X^Y ,异或运算,不同即为1 , 3(11)^2(10)=1(01) 。
- << : 左移运算符 , X<<Y ,相当于 X*(2的Y次方) 。
- >> : 右移运算符 , X>>Y ,相当于 X/(2的Y次方) 。
常用操作(大多都是根据所想要的推公式)
- if(sta[i] | Y!=Y) //判断 sta[i] 状态是否合法
- if(sta[i]&Y==0) //判断 sta[i]与Y是否右重叠
- …………