子集枚举

TODO 我以前写的文章

1 for实现

如果你枚举子集的原集的二进制表示为2x2^x,也就是对应的二进制表示全为1,那么就可以使用这种方案.

正好就是01序列的另一种实现

2 全组合

见 球与盒子对应的内容

3 二进制

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;

//输出一个数的二进制
void print_bin(int t) {
    std::bitset<4> bs(t);
    cout << bs << endl;
}

int main (int argc, char *argv[]) {
    int a = 0b1111; //这个数就是十进制的15
    for(int i =0 ;i<= a;i++) {
        print_bin(i);
    }

    return 0;
}

4 相关题解

题目 OJ 难度
枚举子集(递归实现指数型枚举) luogu 普及-
[NOIP 2005 普及组] 采药 luogu 普及-
费解的开关 roj 普及