AcWing 1572. 递归实现指数型枚举 II
原题链接
简单
作者:
hxj
,
2021-04-16 21:04:48
,
所有人可见
,
阅读 379
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n, a[20], vis[20];
/*
eg: 2 2
1 0
0 1
*/
void dfs(int dpt) {
if(dpt == n) {
for(int i = 0; i < n; i++) {
if(vis[i])
printf("%d ", a[i]);
}
cout << endl;
return;
}
dfs(dpt+1);
// 防止出现 0 1这种重复情况
if(dpt != 0 && !vis[dpt-1] && a[dpt] == a[dpt-1]) return;
vis[dpt] = true;
dfs(dpt+1);
vis[dpt] = false;
}
int main()
{
cin >> n;
for(int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a, a+n);
dfs(0);
return 0;
}