티스토리 뷰

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

import sys
from itertools import combinations

N = int(sys.stdin.readline())

s = []
for _ in range(N):
    s.append(list(map(int, sys.stdin.readline().split())))

people = [i for i in range(N)]
com_people = list(combinations(people, N//2))
length = len(com_people)//2
com = com_people[0:length]

res = 100
for i in range(length):
    check = [0] * N    
    temp1 = 0
    temp2 = 0
    for j in range(N//2):
        check[com[i][j]] = 1
        for k in range(N//2):
            if j != k:
                temp1 += s[com[i][j]][com[i][k]]

    remain = []
    
    for j in range(N):
        if check[j] == 0:
            remain.append(j)
    
    for j in range(N//2):
        for k in range(N//2):
            if j != k:
                temp2 += s[remain[j]][remain[k]]
    
   
    res = min(res, abs(temp1 - temp2))
    
print(res)
공지사항
최근에 올라온 글
«   2024/11   »
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
글 보관함