92. 递归实现指数型枚举
从 1∼n1∼n 这 nn 个整数中随机选取任意多个,输出所有可能的选择方案。
输入格式
输入一个整数 nn。
输出格式
每行输出一种方案。
同一行内的数必须升序排列,相邻两个数用恰好 11 个空格隔开。
对于没有选任何数的方案,输出空行。
本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。
数据范围
1≤n≤151≤n≤15
输入样例:
3
输出样例:
3
2
2 3
1
1 3
1 2
1 2 3
理解
这道题用到了2进制优化,那么什么是二进制优化呢?我的理解就是将一串数字用01,也就是计算机的存储形式进行表示。不行,现在还是没有完全理解,我们看AC代码吧:
1 #include<iostream> 2 3 using namespace std; 4 5 int n; 6 7 void dfs(int u, int state) 8 { 9 if(u == n) 10 { 11 for(int i = 0; i < n; i ++) 12 { 13 if(state >> i & 1) 14 cout << i + 1 << ' '; 15 } 16 puts(""); 17 return ; 18 } 19 20 dfs(u + 1, state); 21 dfs(u + 1, state | 1 << u); 22 } 23 24 void fs(int u, int state) 25 { 26 if(u == n) 27 { 28 for(int i = 0; i < n; i ++) 29 { 30 if(state >> i & 1) cout << i + 1 << ' '; 31 } 32 puts(""); 33 34 return ; 35 } 36 37 fs(u + 1, state); 38 39 fs(u + 1, state | 1 << u); 40 41 } 42 43 int main() 44 { 45 cin >> n; 46 fs(0, 0); 47 return 0; 48 }
没有什么能阻止我对知识的追求!!!

浙公网安备 33010602011771号