백준
백준 14889 스타트와 링크(Java)
Park DJ
2023. 2. 7. 01:25
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
Java 코드
import java.util.Scanner;
public class Main {
static int n;
static int[][] arr = new int[21][21];
static boolean visit[] = new boolean[21];
static int min = Integer.MAX_VALUE;
public static void dfs(int s, int num) {
if(num == n / 2) {
int a = 0;
int b = 0;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
if(visit[i] == true && visit[j] == true) a += arr[i][j];
if(visit[i] == false && visit[j] == false) b += arr[i][j];
}
}
min = Math.min(Math.abs(a - b), min);
return;
}
for(int i = s; i <= n; i++) {
if(visit[i] == false) {
visit[i] = true;
dfs(s + 1, num + 1);
visit[i] = false;
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) arr[i][j] = sc.nextInt();
}
dfs(1, 0);
System.out.println(min);
}
}