标签:oid set tmp class cpp ret pre 输出 sub
输出子集s对应的各个元素
void print_subset(int n. int s) {//打印{0,1,2...n-1}的子集s
for(int i = 0; i < n; i++)
if(s & (1<<i)) printf("%d ", i);
printf("\n");
}
枚举子集
for(int i = 0; i < (1<<n); i++) //枚举各个子集对应的编码0,1,2...2的n次-1
print_subset(n,i);
#include <cstdio>
#include <algorithm>
int n, X, ans;
int a[111];
int main() {
scanf("%d", &n);//n: a1 a2 a3 a4 。。
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
scanf("%d", &X);
for(int i = 0; i < (1 << n); i++) {//最大值 == 2的n - 1 次方
int tmp = 0;
for(int j = 1; j <= n; j++) {
if(i & (1 << j - 1)) {//当这个式子 != 0 时 说明 找到
tmp += a[j];
}
// if((i >> j - 1) & 1)
}
if(tmp == X) ans++;
}
printf("%d\n", ans);
return 0;
}
标签:oid set tmp class cpp ret pre 输出 sub
原文地址:https://www.cnblogs.com/tyner/p/11100375.html