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

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

제재소 두 곳

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

요약
나무들이 아래쪽 첫 제재소까지만 내려가도록 제재소 두 곳을 도로 위에 세워 운반 비용의 합을 최소화한다.
난이도

보통10점 중 7점

유형
동적 계획법, 분할 정복, 누적 합, 그리디
정답자
아직 제출이 없습니다

문제

언덕 꼭대기에서 기슭까지 이어지는 길을 따라 오래된 나무 nn그루가 심어져 있다. 이 나무들을 모두 베어 제재소로 옮기려고 한다. 목재를 낭비하지 않도록 베어낸 나무는 모두 제재소로 운반해야 한다.

목재는 오직 아래쪽(기슭 방향)으로만 운반할 수 있다. 길의 가장 아래쪽 끝에는 제재소가 하나 있다. 여기에 더해 길을 따라 제재소 두 곳을 추가로 지을 수 있으며, 운반 비용이 최소가 되도록 그 위치를 정해야 한다. 베어낸 각 나무는 자신의 위치에서 아래쪽으로 내려가 처음 만나는 제재소로 운반된다. 운반 비용은 목재 1킬로그램을 1미터 옮길 때마다 1센트가 든다.

표준 입력으로 나무의 수, 각 나무의 무게와 위치가 주어질 때, 가능한 최소 운반 비용을 구하여 표준 출력으로 출력하는 프로그램을 작성하라.

입력

첫째 줄에 나무의 수 nn이 주어진다 (2≤n≤200002 \le n \le 20000). 나무는 언덕 꼭대기에서 기슭 방향으로 내려가며 1,2,…,n1, 2, \dots, n으로 번호가 매겨져 있다. 이어지는 nn개의 줄 중 ii번째 줄에는 두 정수 wiw_i와 did_i가 공백 하나로 구분되어 주어진다. wiw_i는 ii번 나무의 무게(킬로그램)이고 (1≤wi≤100001 \le w_i \le 10000), did_i는 ii번 나무와 i+1i+1번 나무 사이의 거리(미터)이다 (0≤di≤100000 \le d_i \le 10000). 마지막 값 dnd_n은 nn번 나무에서 길의 아래쪽 끝에 있는 제재소까지의 거리이다. 모든 나무를 길 끝의 제재소까지 운반하는 총비용은 2,000,000,000센트 미만임이 보장된다.

출력

첫째 줄에 최소 운반 비용을 나타내는 정수 하나를 출력한다.

힌트

추가 제재소 두 곳은 나무가 있는 위치에 지을 수 있다. 각 나무는 자신과 같은 위치이거나 그보다 아래에 있는 가장 가까운 제재소로 운반된다. 아래 그림은 첫 번째 테스트 케이스의 입력에 대한 최적의 제재소 배치를 보여 준다. 나무는 무게가 적힌 원으로, 제재소는 검은색으로 표시되어 있다. 이때 최소 비용은 다음과 같이 2626이 된다.

1⋅(2+1)+2⋅1+1⋅(1+2)+3⋅2+2⋅(1+2+1)+1⋅(2+1)+1⋅1=261 \cdot (2 + 1) + 2 \cdot 1 + 1 \cdot (1 + 2) + 3 \cdot 2 + 2 \cdot (1 + 2 + 1) + 1 \cdot (2 + 1) + 1 \cdot 1 = 26

예제1

  1. 예제 1

    입력
    9
    1 2
    2 1
    3 3
    1 1
    3 2
    1 6
    2 1
    1 2
    1 1
    
    예상 출력
    26