문제 할당

시간 제한5초메모리 제한128 MB

요약
N명의 학생과 N개의 문제에 대한 시간 행렬이 주어질 때, 각 학생에게 서로 다른 문제를 배정해 총 시간을 최소화하는 값을 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 그래프, 비트 연산, 조합론
정답자
아직 제출이 없습니다

문제

N명의 학생과 N개의 문제가 있다. 각 학생은 정확히 한 문제를 맡고, 한 문제는 정확히 한 학생에게만 배정되어야 한다.

각 학생이 각 문제를 푸는 데 걸리는 시간은 서로 다를 수 있다. 예를 들어 다음 표에서 학생 1은 문제 1을 푸는 데 1시간이 걸리지만, 학생 2는 문제 1을 푸는 데 2시간이 걸린다.

문제 1문제 2문제 3
학생 1133
학생 2233
학생 3324

모든 학생에게 서로 다른 문제를 하나씩 배정했을 때, 학생들이 문제를 푸는 데 걸리는 시간의 합을 최소로 만들고 싶다. 위 표에서는 학생 1에게 문제 1, 학생 2에게 문제 3, 학생 3에게 문제 2를 배정하면 총 시간은 1 + 3 + 2 = 6이 되며, 이보다 더 작게 만들 수 없다.

각 학생이 각 문제를 푸는 데 걸리는 시간이 주어질 때, 모든 학생에게 서로 다른 문제를 하나씩 배정하여 가능한 총 시간의 최솟값을 구하라.

입력

첫째 줄에 정수 N이 주어진다. (1 <= N <= 100)

다음 N개의 줄에는 각 학생이 N개의 문제를 푸는 데 걸리는 시간이 순서대로 주어진다. i번째 줄의 j번째 정수는 i번째 학생이 j번째 문제를 푸는 데 걸리는 시간이다.

주어지는 모든 정수는 1,000을 넘지 않는다.

출력

각 학생에게 서로 다른 문제를 하나씩 배정했을 때 가능한 총 시간의 최솟값을 출력한다.

예제1

  1. 예제 1

    입력
    3
    1 3 3
    2 3 3
    3 2 4
    
    예상 출력
    6