BOJ::11578 팀원 모집
https://www.acmicpc.net/problem/11578
백트래킹을 이용하여 풀었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <stdio.h> using namespace std; int n, m,cnt,min; int map[11][11]; int check[11]; bool flag; //모든 문제를 풀 수 있는지 체크 bool isOK() { for (int i = 1; i <= n; i++) { if (check[i] == 0) { return false; } } return true; } //백트래킹 void dfs(int v) { cnt++; for (int i = 1; i <= n; i++) { if (map[v][i] == 1) { check[i]++; } } //모든 문제를 풀 수 있으면서 가장 적은 인원인 경우 if (isOK()) { flag = true; if (min > cnt) { min = cnt; } } else { for (int i = v + 1; i <= m; i++) { dfs(i); } } cnt--; for (int i = 1; i <= n; i++) { if (map[v][i] == 1) { check[i]--; } } } int main() { scanf("%d %d", &n, &m); for (int i = 1; i <= m; i++) { int x; scanf("%d", &x); for (int j = 0; j < x; j++) { int y; scanf("%d", &y); map[i][y] = 1; } } min = 100000; flag = false; for (int i = 1; i <= n; i++) { cnt = 0; dfs(i); } if (flag) { printf("%d\n", min); } else { printf("-1\n"); } } | cs |
'BOJ::문제풀이' 카테고리의 다른 글
11727 2 x n 타일링2 (0) | 2018.01.07 |
---|---|
11581 구호물자 (0) | 2018.01.07 |
11403 경로 찾기 (2) | 2018.01.07 |
11265 끝나지 않는 파티 (0) | 2018.01.06 |
11060 점프 점프 (0) | 2018.01.06 |