<부분집합>
n개의 요소를 가진 배열에 대한 부분집합을 만든다면 총 2^n개의 부분집합이 나올 것.
각각의 요소들마다 부분집합에 포함하거나 포함하지 않거나 둘 중 하나이므로 2^n개의 부분집합이 생기는 것이다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX = 1e5 + 5;
vector<int> subset;
int a[MAX],n;
void make_subset(int k) { //k는 위치
if (k == n) {
if (subset.empty())
cout << "공집합\n";
for (int i : subset)
cout << i << " ";
cout << '\n';
return;
}
subset.push_back(a[k]);
make_subset(k + 1);
subset.pop_back();
make_subset(k + 1);
}
int main() {
cout << "n 입력: ";
cin >> n;
cout << "n개의 배열을 입력: ";
for (int i = 0; i < n; i++)
cin >> a[i];
make_subset(0);
}
<순열>
https://suuntree.tistory.com/16
BOJ 15649 - N과 M (1~12)
N개 중 M개를 뽑아 나열하는 경우의 수 시리즈이다. 기본적으로 백트래킹을 이용해서 재귀로 구현함. 9~12같은 경우 중복을 제거해줘야 하는데, 이건 set<vector>로 해결하였다. #include #include..</vector
suuntree.tistory.com
이걸로 대체
'알고리즘 > 알고리즘 트레이닝(초록)' 카테고리의 다른 글
CSES PS - nearest smaller values(NSV) (0) | 2020.01.16 |
---|---|
CSES PS - Towers (그리디, sorting) (0) | 2020.01.13 |
CSES PS - Grid Paths (0) | 2019.12.22 |
CSEC PS - chessboard and Queens (0) | 2019.12.21 |
효율성 - 최대 부분 배열 합, 두 퀸 (0) | 2019.12.18 |