数组中的子序列即集合中的子集
直接取,个数2^n,每个元素取与不取
有单调性的取,借助优先队列,第i+1个一定选,根据当前是否舍弃第i个向外扩展
位运算
- 取mask的子集
for (int j = mask; j; j = (j - 1) & mask)
- 判断子集(包含)关系
mask包含j(j是mask的子集)
mask | j == mask
- 删除子集
删除mask的子集j
mask ^= j
mask中去处j中的元素(j不一定是mask的子集)
mask & ~j
可以这样理解:
mask中没有的元素运算后不会多出来
mask中包含的元素运算后根据j是否包含判断,j包含则删除,j没有则保留