状压 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)

浙公网安备 33010602011771号