AcWing 1572. 递归实现指数型枚举 II
原题链接
简单
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 16;
int n;
int a[N];
bool state[N];
void dfs(int u)
{
if(u == n) //输出
{
for(int i=0; i <= n; i ++ )
if(state[i]) cout << a[i] << " ";
puts("");
return;
}
state[u] = false; //不选该数时
dfs(u + 1);
//判断连续两次两个数是否相等,且上一次选定了上一个数
if(u && !state[u-1] && a[u] == a[u-1]) return;
state[u] = true; //选择该数时
dfs(u + 1);
}
int main()
{
cin >> n;
for(int i=0; i < n; i ++ ) cin >> a[i];
sort(a, a + n);
dfs(0);
return 0;
}