BOJ 15663 : N과 M (9)
2020. 6. 2. 00:46ㆍPS/Graph Theory
이 문제는 n,m 범위가 엄청 작기에 백트래킹으러 풀 수 있다.
중복 수열 처리는 STL set의 중복 제거 특징을 이용하여 처리할 수 있다.
#include <bits/stdc++.h>
#define sanic ios_base::sync_with_stdio(0);
#define MEM 1002
#define f first
#define s second
#define pb push_back
#define all(v) v.begin(), v.end()
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
const ll MOD = 1e9+7;
ll n,m;
vector<ll> v,z;
int vis[MEM];
set<vector<ll>> ans;
void bt(int cur, int d){
if(d==m){
ans.insert(z);
return;
}
for(int i=0; i<n; i++){
if(vis[i]) continue;
vis[i] = 1;
z.pb(v[i]);
bt(i,d+1);
vis[i] = 0;
z.pop_back();
}
}
main()
{
sanic; cin.tie(0);
cin >> n >> m;
for(int i=0,q; i<n; i++){
cin >> q;
v.pb(q);
}
sort(all(v));
bt(0,0);
for(auto a : ans){
for (int i = 0; i < a.size(); i++)
cout << a[i] << ' ';
cout << '\n';
}
}
'PS > Graph Theory' 카테고리의 다른 글
BOJ 13361 : 최고인 대장장이 토르비욘 (0) | 2021.11.15 |
---|---|
BOJ 22344 : 그래프 균형 맞추기 (0) | 2021.08.01 |
BOJ 16562 : 친구비 (4) | 2021.02.25 |
BOJ 10282 : 해킹 (0) | 2021.01.10 |