枚举子集 增量构造法 位向量法 二进制法
来源:互联网 发布:word转为pdf软件 编辑:程序博客网 时间:2024/05/05 21:21
#include <bits/stdc++.h>//增量构造法using namespace std;void print_subset(int n, int *A, int cur){for (int i = 0; i < cur; i++)cout << A[i] << (i == cur - 1 ? "\n" : " ");int s = cur ? A[cur - 1] + 1 : 0;for (int i = s; i < n; i++){A[cur] = i;print_subset(n, A, cur + 1);}}int main(int argc, char const *argv[]){int n, *A;while (cin >> n && n){A = new int[n];for (int i = 0; i < n; i++)print_subset(n, A, i);delete [] A;}return 0;}
递归边界不需要显示确定,如果无法继续添加元素,就不用再递归了
思路是一次选出一个元素放入集合中;
#include <bits/stdc++.h>//位向量法using namespace std;void print_subset(int n, int *B, int cur){if (cur == n){for (int i = 0; i < cur; i++)if (B[i])cout << i << (i == cur - 1 ? "\n" : " ");return;}B[cur] = 1;print_subset(n, B, cur + 1);B[cur] = 0;print_subset(n, B, cur + 1);}int main(int argc, char const *argv[]){int n, *A;while (cin >> n && n){A = new int[n];for (int i = 0; i < n; i++)print_subset(n, A, i);delete [] A;}return 0;}第二种方法与第一种有些类似,不过是构造了一个位向量,而不是直接构造子集
#include <bits/stdc++.h>//二进制法using namespace std;void print_subset(int n, int s){for (int i = 0; i < n; i++)if (s & (1 << i))cout << i << " ";cout << endl;}int main(int argc, char const *argv[]){int n;while (cin >> n && n)for (int i = 0; i < (1 << n); i++)print_subset(n, i);return 0;}可以说二进制法是位向量法的进化版本,相当于用了一个数字表示位向量;
&运算:都是1 才是1;
| 运算:只要1就是1;
^运算:不一样 才是1;
0 0
- 枚举子集 增量构造法 位向量法 二进制法
- 子集生成:增量构造法 位向量法 二进制法
- 子集生成 增量构造法 位向量法 二进制法
- 暴力求解法_子集生成(增量构造法,位向量法,二进制法)
- 【算法竞赛入门经典】7.3子集生成【增量构造法】【位向量法】【二进制法】
- ACMjava子集生成的三种方法,增量构造,辅助位向量,二进制法
- 二进制法枚举子集
- 二进制法构造子集
- 位向量法构造子集
- 二进制法打印子集
- 二进制法生成子集
- 子集生成 -- 二进制法
- 子集生成 二进制法
- 子集生成-二进制法
- 二进制法生成子集
- 子集生成的两种方法 (增量构造法 和 位向量法)
- 子集生成算法 之 位向量法和增量构造法
- 枚举集合--二进制法
- EntityFramework使用总结(与MVC4.0实现CURD操作)
- Matlab中数组元素引用
- Android 中使用的数学运算
- 51nod1264
- Android Handler 异步消息处理机制的妙用 创建强大的图片加载类
- 枚举子集 增量构造法 位向量法 二进制法
- 单项链表的逆置
- 通过firefox插件firebug获取webqq群和群成员的javascript脚本
- PCA与图像压缩
- eclipse项目部属到tomcat出错,tomcat原本可以正常启动
- jQuery使输入框只能为数字
- adb 连接手机失败
- Android Bitmap大量使用不产生OOM之使用缓存机制
- UI之UIScrollView实现循环滚动视图