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

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

저렴한 여행

면접 대비

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

요약
연속한 정차 지점 사이 거리가 800km 이하가 되도록 호텔을 골라, 총 요금이 최소인 일정과 숙박 일수가 최소인 일정을 각각 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 배열, 투 포인터, 그리디
정답자
아직 제출이 없습니다

문제

대륙을 가로지르는 고속도로를 달리는 장거리 버스 여행은 여러 날이 걸리므로, 호텔 숙박비가 여행 경비에서 큰 부분을 차지한다. 안전과 편의를 위해 버스는 낮에만 달리며 하루에 최대 800 km까지 이동할 수 있다. 여행 중 매일 밤(출발 지점과 도착 지점의 밤은 제외)은 노선을 따라 있는 호텔에서 보낸다.

지금까지는 호텔에서 묵는 밤의 수를 최소로 하도록 여행을 계획했다. 비용을 줄이기 위해, 여행사는 여행 기간이 길어지더라도 호텔 숙박비의 합이 가능한 한 작아지도록 계획하는 것이 이득인지 알고 싶어 한다.

노선은 한 방향으로만 이어지며 갈라지지 않는다. 버스는 노선의 각 지점을 정확히 한 번씩 지난다. 호텔은 출발 지점으로부터의 거리로 구분하며, 한 지점에는 호텔이 최대 하나만 있다. 출발 지점과 도착 지점에서는 밤을 보내지 않는다. 승객 수는 일정하고, 어느 호텔에서든 각 승객과 운전기사는 그 호텔의 제시 가격에 따라 하룻밤에 같은 금액을 낸다. 모든 호텔은 이들 전부를 수용할 수 있다.

길이가 800 km인 노선의 모든 구간에는 호텔이 적어도 하나 있으므로, 위 규칙을 지키는 여행은 항상 가능하다. (노선 전체 길이가 800 km 이하라면 버스는 한 번에 통과할 수 있고, 밤을 전혀 보내지 않는다.)

프로그램은 다음 두 가지 여행 계획을 구해야 한다.

  • 가장 저렴한 여행: 호텔 숙박비의 합이 가능한 한 작다. 그런 계획이 여럿이면 묵는 밤의 수가 가장 적은 것을 고른다.
  • 가장 짧은 여행: 호텔에서 묵는 밤의 수가 가능한 한 적다. 그런 계획이 여럿이면 숙박비의 합이 가장 작은 것을 고른다.

입력

첫째 줄에 공백으로 구분된 두 양의 정수가 주어진다. 노선의 길이 dd (킬로미터 단위)와 호텔의 수 hh이며, d≤16000d \le 16000, h≤1000h \le 1000이다.

다음 hh개의 줄에는 각각 호텔 하나의 정보가 주어진다. 각 줄에는 공백으로 구분된 두 양의 정수, 즉 출발 지점으로부터 그 호텔까지의 거리(킬로미터 단위)와 그 호텔에서의 1인 1박 가격(최대 1000)이 주어진다. 호텔은 출발 지점으로부터의 거리가 증가하는 순서로 나열된다.

출력

두 줄을 출력한다.

첫째 줄에는 가장 저렴한 여행에 대해 그 호텔 숙박비의 합과 묵는 밤의 수를 공백 하나로 구분하여 출력한다.

둘째 줄에는 가장 짧은 여행에 대해 그 호텔 숙박비의 합과 묵는 밤의 수를 공백 하나로 구분하여 출력한다.

(노선 전체 길이가 800 km 이하이면 밤을 전혀 보내지 않는 계획이 가능하며, 이때 숙박비의 합과 밤의 수는 모두 0이다.)

예제4

  1. 예제 1

    입력
    2000 7
    100 54
    120 70
    400 17
    700 38
    1000 25
    1200 18
    1440 40
    
    예상 출력
    35 2
    35 2
    
  2. 예제 2

    입력
    500 1
    250 7
    
    예상 출력
    0 0
    0 0
    
  3. 예제 3

    입력
    1600 3
    400 1
    800 100
    1200 1
    
    예상 출력
    2 2
    100 1
    
  4. 예제 4

    입력
    2400 5
    400 1
    800 50
    1200 1
    1600 50
    2000 1
    
    예상 출력
    3 3
    100 2