NP-hard

아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

외판원 순회 문제(TSP)는 NP-hard라서 도시 수가 조금만 늘어도 빠른 해법을 기대하기 어렵다. 여기서는 방문 순서에 제한을 하나 더 붙인 변형을 푼다.

도시는 11번부터 NN번까지 있고, 두 도시 사이를 오가는 데 걸리는 시간은 모두 주어진다. 모든 도시를 한 번씩 방문하면서 이동 시간의 합을 가장 작게 만들어야 한다.

제한은 이렇다. KK번 도시를 방문할 때, KK보다 번호가 작은 도시는 전부 KK번보다 먼저 방문하거나 전부 KK번보다 나중에 방문해야 한다. 즉 KK보다 번호가 작은 도시 중 하나를 KK번 앞에 두고 다른 하나를 KK번 뒤에 두면 안 된다.

어느 도시에서 시작하고 어느 도시에서 끝내도 된다. 방문 순서에서 이웃한 두 도시 사이의 시간만 더하며, 마지막 도시에서 첫 도시로 돌아오는 시간은 세지 않는다.

제한을 지키면서 모든 도시를 방문하는 데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 도시의 수 NN이 주어진다. (2N15002 \le N \le 1500)

다음 NN개 줄에는 각각 NN개의 정수가 주어진다. AA번째 줄의 BB번째 수는 AA번 도시에서 BB번 도시로 가는 데 걸리는 시간이고, 이 값은 BB번째 줄의 AA번째 수와 같다. AABB가 같으면 00이고, 다르면 11 이상 10001000 이하의 정수이다.

출력

제한을 지키면서 모든 도시를 방문하는 데 드는 시간의 최솟값을 첫째 줄에 출력한다.

힌트

N=3N = 3일 때 방문 순서 1,3,21, 3, 2를 보자. 33번보다 번호가 작은 도시는 11번과 22번인데, 11번은 33번 앞에 있고 22번은 33번 뒤에 있으므로 제한을 어긴다. N=3N = 3에서 제한을 지키는 순서는 (1,2,3)(1, 2, 3), (3,2,1)(3, 2, 1), (2,1,3)(2, 1, 3), (3,1,2)(3, 1, 2) 네 가지뿐이다.