对于状态集合

for(int i=0;i<(1<<n);I++)
{
	
}
例如n=2

所有的状态:00 01 10 11最大为3<(1<<2)

还有位运算的常见操作

枚举子集

#include <bits/stdc++.h>
using namespace std;

void put(int s)
{
    for(int i=1;i<=5;i++)
    {
        cout<<(s&1)<<" ";
        s>>=1;
    }
    cout<<endl;
}

int main()
{
    int s;
    scanf("%d",&s);
    put(s);
    for(int s0=s;s0;s0=(s0-1)&s)//s0为s的子集
    {
        put(s0);
    }

	return 0;
}

求补集


U = A^B;
A为全集, U为B的子集, U = A-B也可以。