模板子集生成 二进制法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板子集生成 二进制法相关的知识,希望对你有一定的参考价值。

此文为博主原创,转载时请通知博主,并把原文链接放在正文醒目位置。

 

子集生成问题:给出一个正整数n,输入含有1~n共n个元素的集合的所有子集。

 

模板代码(qwq表示空集):

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 #include<cstring> 
 5 
 6 inline void read(int &x)
 7 {
 8     char ch = getchar(),c = ch;x = 0;
 9     while(ch < 0 || ch > 9) c = ch,ch = getchar();
10     while(ch <= 9 && ch >= 0) x = (x<<1)+(x<<3)+ch-0,ch = getchar();
11     if(c == -) x = -x;
12 }
13 
14 int num[105];
15 
16 int main()
17 {//子集生成 
18     int n;
19     read(n);
20     for(int cnt = 0;cnt < (1<<n);++ cnt)
21     {
22         for(int i = 0;(1<<i) <= cnt;++ i)
23             if(cnt&(1<<i)) printf("%d ",i+1);
24         if(cnt == 0)
25             printf("qwq");
26         puts("");
27     }
28     return 0;
29 }

 

以上是关于模板子集生成 二进制法的主要内容,如果未能解决你的问题,请参考以下文章

子集生成——增量构造法+位向量法+二进制法

子集生成——二进制法

算法竞赛入门经典7.3子集生成增量构造法位向量法二进制法

子集生成模板

暴力求解法——子集生成(位向量法)

暴力求解法——子集生成(位向量法)