[백준] 14889 스타트와 링크

0~n까지 조합을 생성하여 리스트에 담으면 첫 조합의 여집합은 마지막 조합이다.
즉 team_score[i] 는 team_score[-i-1]과 완전히 반대된다.이를 이용하여 풀면 쉽다.

from itertools import combinations

n=int(input())
num=[i for i in range(n)]
score=[]
for _ in range(n):
    score.append(list(map(int,input().split())))

team_score=[]
for combi in combinations(num,len(num)//2):
    tmp=0
    for c in combinations(combi,2):
        x,y=c
        tmp+=score[x][y]+ score[y][x]
    team_score.append(tmp)

answer=[]
for i in range(len(team_score)//2):
    answer.append(abs(team_score[len(team_score)-i-1]-team_score[i]))

print(min(answer))

좋은 웹페이지 즐겨찾기