아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

MIPT: 사람들을 잇다

시간 제한2초메모리 제한512 MB

요약
건물 n개의 층수와 층간 이동 시간이 주어질 때, 전체 연결을 유지하면서 거주자 간 이동 시간의 합을 최소화하는 복도 n-1개를 고르는 문제입니다.
난이도

어려움10점 중 9점

유형
최소 신장 트리, 분할 정복, 동적 계획법
정답자
아직 제출이 없습니다

문제

모스크바 MIPT 캠퍼스는 현재 리모델링 중이다. 새로 지은 고층 주거단지에 신입생 기숙사가 들어선다. 한 줄로 늘어선 고층 건물이 nn개 있고, 앞에서부터 ii번째 건물의 층수는 hih_i이다. 건물의 기초는 모두 같은 높이에 있고 층의 높이도 모두 같으므로, 어느 두 건물에서든 아래에서부터 같은 번호의 층은 같은 높이에 있다.

건물의 모든 층에는 주민이 정확히 한 명씩 살고 있다. 주민은 각 건물 안에서 엘리베이터로 위아래로 이동할 수 있다. 건물 ii에서 한 층을 이동하는 데는 tvitv_i초가 걸린다.

이 사업의 유일한 단점은 출입구를 지킬 예산이 없다는 점이다. 그래서 단지 밖으로 나가거나 단지 안으로 들어올 수 없다. 이를 보완하기 위해 건물들을 잇는 연결 통로를 추가로 짓는다. 각 통로는 완전히 수평이어야 하므로, 두 건물의 같은 번호 층을 잇는다. 통로는 양 끝 사이에 있는 어떤 건물과도 겹칠 수 없다. 정식으로 쓰면, 건물 ii와 건물 jj 사이에 층 xx로 통로를 놓는다면, i<k<ji < k < j인 모든 kk에 대해 hk<xh_k < x이어야 하고, hi≥xh_i \geq x와 hj≥xh_j \geq x도 성립해야 한다.

통로를 지나는 데는 거리와 관계없이 thth초가 걸린다. 통로는 비싸서 n−1n-1개까지만 지을 수 있다.

주민들의 만족도를 유지하려면 다음 조건을 지켜야 한다.

  • 어느 건물의 어느 층에서든 엘리베이터와 통로를 이용해 다른 건물의 어느 층으로든 갈 수 있다.
  • 모든 주민에게 11부터 R=∑i=1nhiR = \sum_{i=1}^n h_i까지 번호를 매긴다. 주민 xx가 엘리베이터와 통로를 이용해 주민 yy의 거처에 도착하는 데 필요한 최소 시간(초)을 d(x,y)d(x, y)라 하자. 이때 ∑1≤x<y≤Rd(x,y)\sum_{1 \leq x < y \leq R} d(x, y)가 최대한 작아야 한다.

MIPT 기획위원회가 이 사업을 마칠 수 있도록 도와라.

입력

첫 줄에는 건물 수 nn과 수평 통로 하나를 지나는 데 걸리는 시간 thth가 주어진다(1≤n≤601 \leq n \leq 60, 1≤th≤1061 \leq th \leq 10^6).

이어지는 nn개의 줄은 건물을 설명한다. ii번째 줄에는 두 정수 hih_i와 tvitv_i가 주어진다. hih_i는 건물의 층수이자 주민 수이고, tvitv_i는 건물 ii에서 수직으로 한 층을 이동하는 데 걸리는 시간(초)이다(1≤hi≤30001 \leq h_i \leq 3000, 1≤tvi≤1061 \leq tv_i \leq 10^6).

R=∑i=1nhi≤3000R = \sum_{i=1}^n h_i \leq 3000이 보장된다.

출력

n−1n-1개의 통로를 짓는 모든 유효한 방법 중에서 ∑1≤x<y≤Rd(x,y)\sum_{1 \leq x < y \leq R} d(x, y)의 최솟값을 정수 하나로 출력한다.

힌트

첫 번째 샘플에서는 통로가 없으므로, 답은 수직 거리의 합 그 자체다.

나머지 샘플의 최적 배치는 아래 그림과 같다.

      #           #        
      #           #        
      #-------#   #       #
      #   #   #   #   #   #
      #   #   #   #   #   #
      #   #---#   #   #   #
      #   #   #   #---#---#
# #   #   # #-#   #   #-# #
#-#   #   # # #   #   # # #
# #   #-# # # #   # #-# # #

예제4

  1. 예제 1

    입력
    1 1
    5 1
    
    예상 출력
    20
    
  2. 예제 2

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

    입력
    5 1000
    10 1
    1 1
    7 1
    3 1
    8 1
    
    예상 출력
    460314
    
  4. 예제 4

    입력
    5 1
    10 1000
    1 1000
    7 1000
    3 1000
    8 1000
    
    예상 출력
    1626464