AcWing 92. 递归实现指数型枚举
原题链接
简单
作者:
叶菲莫夫
,
2020-02-24 12:50:44
,
所有人可见
,
阅读 518
题意分析
该题意仔细分析之后,不难发现,其实类似于n个不同颜色(有且只有一个的苹果),求不同颜色的组合方案有多少种(与排列顺序无关)。
举例说明
有三个苹果,红黄蓝,问有多少种组合方案?
红 黄 蓝
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
.........
1 1 1
从中不难发现,可以用二进制来表示苹果是否被选择的状态,且某个方案恰好唯一的有对应的数字。
例如有3个苹果,那么每个苹果选与不选的组合,不难推出2^3个方案数,且所有的方案方式转为十进制后恰好是
[0,2^3-1].可以实现不重不漏的一一对应。
C++ 代码
#include<iostream>
#include<cmath>
using namespace std;
int n;
int main(){
cin >> n;
int x = pow(2,n);
for(int i=0;i<x;i++){
int y = i;
int j = 1;
while(y){
if(y&1) cout<<j<<" ";
j++;
y >>= 1;
}
cout<<endl;
}
return 0;
}