나이트 이야기

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

요약
무한 체스판에서 N개의 나이트를 N개의 서로 다른 목표 칸에 배정해 총 이동 횟수를 최소로 만든다.
난이도

보통10점 중 7점

유형
동적 계획법, 최단 경로, 그래프, 비트 연산
정답자
아직 제출이 없습니다

문제

무한히 큰 체스판이 있다. 이 체스판의 서로 다른 칸에 나이트 NN개가 놓여 있다. 또한 체스판에는 칸 NN개가 특별히 표시되어 있으며, 이 칸들을 목적칸이라고 부른다. 모든 목적칸은 어떤 나이트의 처음 위치와도 겹치지 않는다.

나이트 NN개를 모두 목적칸으로 옮기는 데 필요한 최소 이동 횟수의 합을 구하는 프로그램을 작성하시오. 나이트는 모두 똑같이 생겨서 서로 구분할 수 없으므로, 어떤 나이트가 어떤 목적칸으로 갈지는 자유롭게 정할 수 있다. 여러 나이트가 같은 칸에 동시에 있어도 되지만, 최종적으로 각 목적칸에는 정확히 나이트 한 개씩 놓여 있어야 한다.

나이트는 한쪽으로 두 칸, 그에 수직인 방향으로 한 칸 움직이는 L자 형태로 이동한다. 즉, 칸 (x,y)(x, y)에서 (x±1,y±2)(x \pm 1, y \pm 2) 또는 (x±2,y±1)(x \pm 2, y \pm 1)의 여덟 칸 중 하나로 이동할 수 있다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫째 줄에는 나이트의 수(= 목적칸의 수) NN이 주어진다. (1≤N≤151 \le N \le 15) 이어지는 NN개의 줄에는 각 나이트의 처음 위치를 나타내는 두 정수 xx와 yy가 주어진다. 그다음 NN개의 줄에는 각 목적칸의 좌표 xx와 yy가 주어진다. 모든 좌표는 32비트 부호 있는 정수 범위 안의 값이다.

입력의 마지막 줄에는 00이 하나 주어지며, 이는 입력의 끝을 의미한다.

출력

각 테스트 케이스마다 다음 형식으로 한 줄씩 출력한다.

k. m

여기서 kk는 테스트 케이스의 번호(1부터 시작)이고, mm은 나이트를 모두 목적칸으로 옮기는 최소 이동 횟수의 합이다.

예제5

  1. 예제 1

    입력
    2
    3 5
    6 5
    5 3
    7 3
    0
    
    예상 출력
    1. 3
    
  2. 예제 2

    입력
    1
    0 0
    1 2
    0
    
    예상 출력
    1. 1
    
  3. 예제 3

    입력
    1
    0 0
    1 0
    0
    
    예상 출력
    1. 3
    
  4. 예제 4

    입력
    1
    0 0
    2 2
    0
    
    예상 출력
    1. 4
    
  5. 예제 5

    입력
    1
    0 0
    1 2
    1
    5 5
    5 8
    0
    
    예상 출력
    1. 1
    2. 3