对于状态集合
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也可以。