【算法】 状态压缩 位运算在01集合中点点运用

来源:互联网 发布:程序员的数学pdf 编辑:程序博客网 时间:2024/05/19 19:41

为什么说是点点,因为我也知道太少了
太基础的不想写,就写了些最近觉得比较巧妙的运用
就当我是写来给自己备忘的吧
其实我也想解释一下,但好像看代码都能看懂就应该不用了吧


正文

集合中单独取出每一位

当然不是一位位试然后与一下判断

我智障了,重发一个
for (int j = s; j > 0; j -= lowbit(j)) //use the lowbit(j)

之前的智障代码

for (int j = s; j > 0; j -= lj){    i = (s & (lj = lowbit(j));

集合中枚举少一个元素的子集(s^i)

这在状压dp中经常用,特别是我写的棋盘状压dp
我才不会说就是上一个的与改成异或的

for (int j = s; j > 0; j -= lj)    i = (s ^ (lj = lowbit(j));

集合中枚举子集

就是因为这个在POI2004prz中被坑了好久
这就是我在讲对拍相关的博客中对prz念念不忘的原因
为了方便,不含空集

    for (int j = s; j > 0; j = s & (j - 1)) //use the j
原创粉丝点击