《算法竞赛入门经典》-7.3-子集生成
2017-08-26 19:49
134 查看
一.二进制法:
①表示{0,1,2,……,n - 1}的子集S
②为了处理方便,最右边的位总是对应元素0,而不是元素1
③与、或和异或都满足交换律:
A & B = B & A
A | B = B | A
A ^ B = B ^ A
④A & B,A | B,A ^ B分别对应集合的交、并和对称差
⑤为了方便,往往在程序中把全集定义成u_set = (1 << n) - 1,则A的补集就是u _set ^ A
代码实现:
①表示{0,1,2,……,n - 1}的子集S
②为了处理方便,最右边的位总是对应元素0,而不是元素1
③与、或和异或都满足交换律:
A & B = B & A
A | B = B | A
A ^ B = B ^ A
④A & B,A | B,A ^ B分别对应集合的交、并和对称差
⑤为了方便,往往在程序中把全集定义成u_set = (1 << n) - 1,则A的补集就是u _set ^ A
代码实现:
int n,a[101];//n为元素个数 void print_subset(int s)//s代表着一个子集 { for(int i = 0; i <= n - 1; ++i) if(s & (1 << i))//如果s的第i位(从0开始数)上是1 printf("%d ",a[i]);//打印 printf("\n"); } int main() { //输入 cin >> n; for(int i = 0; i <= n - 1; ++i) scanf("%d",&a[i]); for(int i = 0; i <= (1 << n) - 1; ++i) print_subset(i);//打印每个子集 return 0; }
相关文章推荐
- 读《算法竞赛入门经典》 7.3子集生成
- 《算法竞赛入门经典》-【第七章:暴力求解法】-7.3:子集生成
- 算法竞赛入门经典读书笔记(四)7.3子集生成
- 【算法竞赛入门经典】7.3子集生成【增量构造法】【位向量法】【二进制法】
- 算法竞赛入门经典:第七章 暴力求解法 7.8子集生成
- 7.3 子集生成
- 7.3子集生成
- 算法竞赛入门经典读书笔记(四)7.3子集生成
- 子集生成
- 子集生成算法
- 子集生成算法
- 子集生成算法
- C++利用递归生成子集
- UVA1151[Buy or Build] 子集枚举+最小生成树
- 子集生成
- 子集生成
- 《算法竞赛入门经典2ndEdition 》例题3-5 生成元(Digit Generator, Uva1583)
- 子集生成(三种办法)
- 二进制法生成子集
- 子集生成