提供一个神奇的姿势
\(for(int \ i=sta;i;i=i-1\&sta)\)
稍微解释一下了,\(sta\)保存的0,1即为原来的需要求子集的集合,\(i\)即为遍历的子集
我们取的子集即是把当前集的元素取或不取,即\(sta\)的1取或不取
我们减去1,即是把最后一位的1变成0,最后一个1后面的0全变1,和原来的&一下,变的1全回去了,也把最后一位搞成0了
剩下的以此类推就差不多了
提供一个神奇的姿势
\(for(int \ i=sta;i;i=i-1\&sta)\)
稍微解释一下了,\(sta\)保存的0,1即为原来的需要求子集的集合,\(i\)即为遍历的子集
我们取的子集即是把当前集的元素取或不取,即\(sta\)的1取或不取
我们减去1,即是把最后一位的1变成0,最后一个1后面的0全变1,和原来的&一下,变的1全回去了,也把最后一位搞成0了
剩下的以此类推就差不多了
转载于:https://www.cnblogs.com/butterflydew/p/9419344.html