二进制分解

written by oneman233
2019-08-19

所有的数字都可以用二进制表示出来。

那么对于一个含有n个元素的集合,其所有子集的可能情况数是$2^n$,因为对单个元素只有选和不选两种选择。

如果要暴力枚举某个集合的所有子集的可能性,可以使用二进制来表示当前状态。

如果当前数字在该位上是1代表选中这一位的元素,否则代表未选中。

基本代码:

for(int i=0;i<(1<<n);++i)
    for(int j=0;j<n;++j)
        if(i&(1<<j)) //选中
        else //未选中

注意:$2^j$有可能非常大