Algorithm/백준
[백준][14889번] 스타트와 링크
1일1코딩
2020. 4. 23. 23:01
https://www.acmicpc.net/problem/14889
14889번: 스타트와 링크
예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.
www.acmicpc.net
풀이과정
1. 완전탐색을 이용했다.
2. 팀을 나눈 후 각 점수를 더해 최솟값이 되는 점수를 구하면 된다.
소스코드
더보기
#include <stdio.h>
#include <stdlib.h>
int map[20][20];
int user[20];
int N;
int answer = 0x7fffffff;
void solution(int cur, int count) {
if (count == N/2) {
int result = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (i == j) continue;
if (user[i] == user[j]) {
result = (user[i] == 0) ? result + map[i][j] : result - map[i][j];
}
}
}
result = abs(result);
if (answer > result) {
answer = result;
}
return;
}
for (int i = cur; i < N; i++) {
if (user[i] == 0) {
user[i] = 1;
solution(i + 1, count + 1);
user[i] = 0;
}
}
}
int main()
{
scanf("%d", &N);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
scanf("%d", &map[i][j]);
}
}
solution(0, 0);
printf("%d\n", answer);
}
결과