何为枚举,假设有n个物品,那么对每一种物品,你都有选或不选两种情况,所以总共有2^n种情况,这就对应于求一个有n个元素的集合的子集,那么子集的个数就有2^n个。
这里我们知道每一个数字都可以由唯一的二进制串表示,我们对应于上面的情况,让1代表取物品的情况,0表示不取物品的情况。
这样一来就有了用二进制枚举子集的方法。
这里采用了位运算主要是表达简单,且速度快
#include <bits/stdc++.h>
int a[5] = {
1, 3, 5, 6, 8};
void print_subset(int n, int s) {
for(int i = 0; i < n; i++) {