【题解-洛谷】B3622 枚举子集(递归实现指数型枚举)
题目:B3622 枚举子集(递归实现指数型枚举)
题目描述
今有 n n n 位同学,可以从中选出任意名同学参加合唱。
请输出所有可能的选择方案。
输入格式
仅一行,一个正整数 n n n。
输出格式
若干行,每行表示一个选择方案。
每一种选择方案用一个字符串表示,其中第 i i i 位为 Y
则表示第 i i i 名同学参加合唱;为 N
则表示不参加。
需要以字典序输出答案。
输入输出样例 #1
输入 #1
3
输出 #1
NNN
NNY
NYN
NYY
YNN
YNY
YYN
YYY
说明/提示
对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 10 1\leq n\leq 10 1≤n≤10。
代码
#include<iostream>using namespace std;const int Maxn = 10 + 10;int n, vis[Maxn];void dfs(int pos){if(pos == n){for(int i = 0; i < n; i ++){if(vis[i]){cout << "Y";}else{cout << "N";}}puts("");return;}dfs(pos + 1); // 该位置不参加vis[pos] = 1;dfs(pos + 1); // 该位置参加vis[pos] = 0;
}int main(){cin >> n;dfs(0);return 0;
}
结果