二进制常常用来表示状态,倘若要对某种状态枚举它的子集,却不知如何处理 例如:10001001 -> 10000001 即为前者子集中的元素
下面提供一种巧妙的写法:
for(int i=0;i<(1<<n);i++) for(int j=i;j>=0;j=i&(j-1)){ //i为状态 - j为i的子集 }
枚举子集
原文:https://www.cnblogs.com/Camille-Ferros/p/14586123.html