https://www.acmicpc.net/problem/15664
사용할 수 있는 숫자들 중에 중복되는 숫자가 있을 수 있다.
숫자는 중복해서 사용하면 안 되고 입력받은 개수만큼만 사용해야 하며
만들어낸 수열은 비내림차순이어야 한다.
#include<iostream> #include<vector> #include<unordered_set> #include<set> using namespace std; int N, M, arr[9], n[9]; bool isused[9]; set<vector<int> > st; vector<int> v; void func(int k) { if (k == M + 1) { for (int i = 1; i <= M; i++) { v.push_back(arr[i]); } st.insert(v); v.clear(); return; } for (int i = 1; i <= N; i++) { if (!isused[i] && arr[k - 1] <= n[i]) { isused[i] = true; arr[k] = n[i]; func(k + 1); isused[i] = false; } } } int main() { cin >> N >> M; for (int i = 1; i <= N; i++) { cin >> n[i]; } func(1); for (set<vector<int> >::iterator it = st.begin(); it != st.end(); it++) { for (int i = 0; i < (*it).size(); i++) { cout << (*it)[i] << ' '; } cout << '\n'; } return 0; }
'알고리즘 문제 풀이 > 백준 온라인 저지' 카테고리의 다른 글
백준 1182번: 부분수열의 합 (C++) (0) | 2019.07.22 |
---|---|
백준 9663번: N-Queen (C++) (0) | 2019.07.21 |
백준 2468번: 안전 영역 (C++) (0) | 2019.07.20 |
백준 2206번: 벽 부수고 이동하기 (C++) (0) | 2019.07.20 |
백준 15663번: N과 M (9) (C++) (0) | 2019.07.19 |