位运算
-
左移运算符(<<)
把一个整型数的所有位向左移动指定的位数,并从右边界移入0。
例:14<<2
这里的整型数为14,指定的位数为2,所以值为56
14转化为二进制为1110,56转化为二进制为111000
实际上可以看成14*4 -
左移运算符(>>)
同上 -
&(and)
相同位的两个数字都为1,则为1;若有一个不为1,则为0。
判断二进制下有没有间隔为n的1(错位&)bool judge(int x) { return (x&(x<<n)); }判断相同位的两个数字都为1
bool judge(int x,int y) { return (x&y); } -
|(or)
相同位只要一个为1即为1。if((s|t)!=((1<<n)-1)) //如果存在s和t相同位都是0的时候 -
^(xor)
相同位不同则为1,相同则为0。s2=s1^(1<<i) //当s1第i位为1的时候,把它去除 -
~(not)
0和1全部取反。
状态压缩dp
我们知道,用DP解决一个问题的时候很重要的一环就是状态的表示,一般来说,一个数组即可保存状态。但是有这样的一些题目,它们具有DP问题的特性,但是状态中所包含的信息过多,如果要用数组来保存状态的话需要四维以上的数组。于是,我们就需要通过状态压缩来保存状态,而使用状态压缩来保存状态的DP就叫做状态压缩DP。
和普通dp一样要注意初始化和状态转移方程,唯一的不同是状态压缩dp的状态可以是地图里的一行,可以是走过的路径,等等.....
本文深入解析了位运算中的左移运算符、按位与、按位或、按位异或和按位取反操作,并介绍了状态压缩DP的概念及其在解决复杂问题时的应用。文章还提供了状态压缩DP的基本步骤和注意事项。
3301

被折叠的 条评论
为什么被折叠?



