小白书之求无重复元素集合的子集
2015-09-11 18:49
357 查看
1:增量构造法:
一次选出一个元素放到集合中。
一次选出一个元素放到集合中。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<string> #include<cctype> #include<cmath> #include<map> #include<set> #include<vector> #include<queue> #include<stack> #include<ctime> #include<algorithm> #include<climits> #define LL long long using namespace std; const int N=101; int P ; void print_subset(int n,int *A,int cur) { for(int i=0;i<cur;i++) cout<<P[A[i]]<<' '; cout<<endl; 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 n; while(cin>>n) { int A ; for(int i=0;i<n;i++) cin>>P[i]; print_subset(n,A,0); } return 0; }2.位向量构造法:
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<string> #include<cctype> #include<cmath> #include<map> #include<set> #include<vector> #include<queue> #include<stack> #include<ctime> #include<algorithm> #include<climits> #define LL long long using namespace std; const int N=101; int P ; void print_subset(int n,int *A,int cur) { if(cur==n) { for(int i=0;i<n;i++) if(A[i]) cout<<P[i]<<' '; cout<<endl; return; } A[cur]=1; print_subset(n,A,cur+1); A[cur]=0; print_subset(n,A,cur+1); } int main() { int n; while(cin>>n) { int A ; for(int i=0;i<n;i++) cin>>P[i]; print_subset(n,A,0); } return 0; }3.二进制法:
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<string> #include<cctype> #include<cmath> #include<map> #include<set> #include<vector> #include<queue> #include<stack> #include<ctime> #include<algorithm> #include<climits> #define LL long long using namespace std; const int N=101; int P ; void print_subset(int n,int s) { for(int i=0;i<n;i++) if(s&(1<<i)) cout<<P[i]<<' '; cout<<endl; } int main() { int n; while(cin>>n) { int A ; for(int i=0;i<n;i++) cin>>P[i]; for(int i=0;i<(1<<n);i++) print_subset(n,i); } return 0; }
相关文章推荐
- A. Vasya and Petya's Game(cf第一题)
- 黑马程序员——java基础知识篇——>异常总结
- 线性表的各种基本操作
- 编译和安装shibboleth-sp遇到的问题
- 【HDU4292】【1的限制建图】
- aix下cpu丢失2个时Oracle 数据库实例的alert报错
- Linux内核和根文件系统引导加载程序
- VFL-滚动视图自动布局
- MYSQL 命令
- AngularJS进阶(五)Angular实现下拉菜单多选
- LeetCode 32 Longest Valid Parentheses 最大合法括号匹配长度计算 动态规划算法有待学习
- Java NIO的使用
- AngularJS进阶(五)Angular实现下拉菜单多选
- stm32的swd接口的烧写协议是否公开的呢?
- Merge Intervals——LeetCode
- varnish 优秀的缓存服务器
- 威胁情报提供的服务
- 机器学习
- Python资源
- 从零开始自学Swift(五)