AcWing 1572. 递归实现指数型枚举 II
原题链接
简单
作者:
月牙云外镜
,
2021-03-08 15:19:33
,
所有人可见
,
阅读 363
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
using namespace std;
const int N = 20;
int n;
int s[N], st[N]; //s[N]读入数字, st[N]记录状态
vector<vector<int>> res; //创建一个二维vector数组存放所有的方案
vector<int> r;
void dfs(int u) //深搜
{
if(u == n)
{
for(int i=0; i<n; i++)
if(st[i] == 1)
r.push_back(s[i]);
res.push_back(r);
r.clear();
return;
}
st[u] = 1;
dfs(u+1);
st[u] = 2;
dfs(u+1);
}
int main()
{
cin >> n;
for(int i=0; i<n; i++)
cin >> s[i];
sort(s, s+n); //快速排序
dfs(0);
set<vector<int>> sr(res.begin(), res.end()); //使用set会自动去重
res.assign(sr.begin(), sr.end()); //利用assgin覆盖原有的res数组
for(int i=0; i<res.size(); i++)
{
for(int j=0; j<res[i].size(); j++)
cout << res[i][j] << ' ';
cout << endl;
}
return 0;
}