혼종 꼬지마루
[백준] 14889 - 스타트와 링크 본문
dfs의 기본문제라고 생각된 문제
1. N/2로 팀을 나눈다
2. 2중포문으로 start팀과 link 팀의 능력치를 구하고, 차이의 최소값을 구한다
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 | #include <iostream> #define MX 22 #define INF 987654321 #define ABS(X) (X) > 0? (X): -(X) using namespace std; bool check[MX]; int map[MX][MX]; int N, dab = INF; void dfs(int d, int pos) { if (d == N / 2) { int start, link; start = link = 0; for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { if (check[i] && check[j]) start += map[i][j]; if (!check[i] && !check[j]) link += map[i][j]; } } int tmp = ABS(start - link); if (tmp < dab) dab = tmp; return; } for (int i = pos; i < N; i++) { check[i] = true; dfs(d + 1, i + 1); check[i] = false; } } int main(void) { cin >> N; for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) cin >> map[i][j]; dfs(0, 1); cout << dab << endl; return 0; } | cs |
'Algorithms > DFS' 카테고리의 다른 글
[백준] 3967 - 매직스타 (0) | 2018.09.14 |
---|---|
[SWEA] 4223 - 삼성이의 트라우마 (0) | 2018.09.08 |
[백준] 9997 - 폰트 (0) | 2018.08.31 |
[백준] 1208 - 부분집합의 합2 (0) | 2018.08.29 |
[백준] 15660 - 테트로미노(2) (1) | 2018.08.28 |