import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class SWEA4012 {
static int n, min;
static int[][] S;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
n = Integer.parseInt(br.readLine());
S = new int[n][n];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
int data = Integer.parseInt(st.nextToken());
S[i][j] = data;
}
}
min = Integer.MAX_VALUE;
combination(0, 0, 0);
sb.append("#").append(tc).append(" ").append(min).append("\n");
}
br.close();
System.out.println(sb);
}
private static void combination(int cnt, int start, int flag) {
if (cnt == n / 2) {
sumMethod(flag);
return;
}
for (int i = start; i < n; i++) {
combination(cnt + 1, i + 1, flag | 1 << i);
}
}
private static void sumMethod(int flag) {
int sumA = 0, sumB = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if ((flag & 1 << i) != 0 && (flag & 1 << j) != 0) {
sumA += S[i][j] + S[j][i];
} else if ((flag & 1 << i) == 0 && (flag & 1 << j) == 0) {
sumB += S[i][j] + S[j][i];
}
}
}
min = Math.min(min, Math.abs(sumA - sumB));
}
}
처음에 A와 B의 합이 전체 값과 같다고 착각하고 접근해서 자꾸 답이 안나와서 로직 설계부터 잘못 되었음을 깨달았음
조합만 만나면 자꾸 고장나지 왜
'온라인 저지 > SWEA' 카테고리의 다른 글
[SWEA/Java] 5644 무선 충전 (0) | 2022.02.18 |
---|---|
[SWEA/Java] 1974 스도쿠 검증 (0) | 2022.02.18 |
[SWEA/Java] 6808 규영이와 인영이의 카드게임 (0) | 2022.02.16 |
[SWEA/Java] 5432 쇠막대기 자르기 (0) | 2022.02.13 |
[SWEA/Java] 2805 농작물 수확하기 (0) | 2022.02.13 |
댓글