조합으로 2팀으로 나눈 후에!!!!
두 팀의 능력치의 최소를 구하는 문제!!
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 73 74 75 76 | #include <stdio.h> #include <string.h> #define MAX 987654321 int visit[21]; int map[22][22]; int N, MIN; int abs(int a) { return a < 0 ? -1 * a : a; } void C(int cur, int n) { if (n == N/2) { int team_1 = 0; int team_2 = 0; int team_bal = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (visit[i] == 1 && visit[j] == 1) { team_1 += map[i][j]; } else if (visit[i] == 0 && visit[j] == 0) { team_2 += map[i][j]; } } } team_bal = abs(team_1 - team_2); if (MIN > team_bal) MIN = team_bal; return; } for (int i = cur + 1; i < N; i++) { visit[i] = 1; C(i, n + 1); visit[i] = 0; } return; } int main() { MIN = MAX; scanf("%d",&N); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { scanf("%d", &map[i][j]); } } for (int i = 0; i < N; i++) { visit[i] = 1; C(i, 1); visit[i] = 0; } printf("%d\n", MIN); return 0; } | cs |
'SW 업무 관련 > 백준' 카테고리의 다른 글
[C언어] 14888. 연산자 끼워넣기 (0) | 2018.09.25 |
---|---|
[C언어] 15686. 치킨배달 (0) | 2018.09.25 |
[C언어] 14890. 경사로 (0) | 2018.09.25 |
[C언어] 14891. 톱니바퀴 (0) | 2018.09.24 |
[C언어] 25686 치킨 배달. (0) | 2018.09.24 |