状压 dp 小技巧集合(位运算小技巧)

整理一下见到的实用小技巧

1、询问第 \(i\) 位是否为 \(1\):

x&(1<<(i-1))
  • 如果这么写返回的不是 \(1\) !!
(x>>(i-1))&1
  • 这样才返回 \(01\)

2、将 \(x\)\(i\) 位取反

x ^= 1<<(i-1)

3、将 \(x\)\(i\) 位变为 \(1\)

x |= 1<<(i-1)

4、将 \(x\)\(i\) 位变为 \(0\)

x &= (~(1<<(i-1)))

5、去掉 \(x\) 最右边的 \(1\),也就是 \(lowbit(x)\)

x &= x-1

6、取出最右边的 \(1\) ,还是 \(lowbit(x)\)

x & (-x)

7、判断是否有连续的 \(1\)

x & (x<<1)
  • 还是注意,不返回 \(1\)

8、枚举子集

敲黑板,非常重要且实用!

for(int y=x ; y ; y=(y-1)&x)
posted @ 2022-05-08 22:11  Xu_brezza  阅读(43)  评论(2)    收藏  举报