울타리

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

요약
주어진 구멍들 중 일부를 선택해 볼록 다각형 울타리를 만들 때, 기둥 20개당 20유로와 울타리 밖 나무 1개당 111유로를 더한 총 비용을 최소화하는 문제입니다.
난이도

어려움10점 중 8점

유형
기하, 동적 계획법, 완전 탐색
정답자
아직 제출이 없습니다

문제

어느 아침, 과수원 주인 Fred가 사과나무를 둘러보다가 밤사이에 나무 한 그루가 베어졌다는 것을 알게 되었다. 나무 한 그루는 평균적으로 111€의 가치를 가진다. 이는 그 나무의 사과로 벌 수 있는 금액이다. 더 이상의 손실을 막기 위해 Fred는 과수원에 울타리를 세우기로 했다.

울타리는 철사로 연결된 기둥으로 이루어진다. 기둥은 미리 뚫려 있는 구멍들 중에만 세울 수 있다. 철사는 공짜지만 기둥은 한 개당 20€에 사야 하므로, 모든 나무를 둘러싸는 것이 항상 이득이거나 가능한 것은 아니다.

과수원은 1000×1000 m² 크기의 정사각형이다. 위에서 내려다볼 때 왼쪽 아래 모서리가 (0, 0), 오른쪽 위 모서리가 (1000, 1000)이다.

예를 들어, 미리 뚫린 구멍이 네 개(원), 나무가 세 그루(사각형) 있다고 하자. 최선의 선택은 기둥 세 개를 사서 선택된 구멍(가 채워진 원)에 세우고 철사(선)로 연결한 뒤, 왼쪽 위 구멍은 비워 두는 것이다. 이때 비용은 3·20€ + 1·111€ = 171€가 된다. 기둥 세 개를 샀고 나무 한 그루를 둘러싸지 못했기 때문이다(그 나무의 수확량 손실).

미리 뚫린 구멍들과 나무들의 위치를 입력받아, 울타리를 전혀 세우지 않는 것까지 포함해 최소 총비용을 출력하는 프로그램을 작성하라. 각 나무는 하나의 점으로 보고, 실제 모양은 무시한다.

입력

첫 줄에 두 정수 N과 M이 주어진다 (3 ≤ N ≤ 100, 1 ≤ M ≤ 100). N은 미리 뚫린 구멍의 수, M은 나무의 수이다. 다음 N개 줄에는 구멍의 위치가, 그 다음 M개 줄에는 나무의 위치가 주어진다. 각 위치는 한 줄에 두 정수 x y로 주어진다 (0 ≤ x, y ≤ 1000). 서로 같은 위치는 없으며, 세 위치가 한 직선 위에 놓이는 경우도 없다.

출력

Fred의 최소 비용을 한 줄에 정수 하나로 출력한다. Fred가 기둥 P개를 사고 나무 T그루를 둘러싸지 못했다면, 비용은 20·P + 111·T이다.

예제4

  1. 예제 1

    입력
    4 3
    800 300
    200 200
    200 700
    600 700
    400 300
    600 500
    800 900
    
    예상 출력
    171
    
  2. 예제 2

    입력
    3 1
    0 0
    10 0
    5 10
    5 3
    
    예상 출력
    60
    
  3. 예제 3

    입력
    3 1
    0 0
    10 0
    5 10
    100 100
    
    예상 출력
    111
    
  4. 예제 4

    입력
    3 6
    0 0
    1000 0
    0 1000
    137 241
    452 88
    211 509
    613 152
    88 701
    305 333
    
    예상 출력
    60