놀이동산

면접 대비

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

요약
여러 블록에 사는 시민들이 택시(A원/블록, 1인승)나 버스(B원, 40인승, 한 지점에서 출발)를 이용해 0번 블록까지 갈 때 최소 총비용을 구한다.
난이도

보통10점 중 5점

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

문제

준용이는 ㅇㅇ신도시에 새로 문을 여는 놀이동산 Seungbum Amusement Park, 줄여서 SAP의 홍보팀에서 일한다. 준용이는 미리 입장권을 예약한 ㅇㅇ시 시민에게 교통비를 대주는 이벤트를 준비하고 있다. 하지만 SAP의 재무팀은 경비를 최소로 줄이지 않으면 이벤트를 진행할 수 없다고 한다. 준용이에게는 너무 쉬운 계산이지만, 계산을 어려워하는 팀원을 위해 프로그램으로 만들려고 한다.

ㅇㅇ시는 0번부터 10,000번까지 번호가 붙은 블록이 도로를 따라 순서대로 늘어서 있고, 놀이동산은 0번 블록에 있다.

ㅇㅇ시의 교통수단은 택시와 셔틀버스 두 가지뿐이다.

택시는 기본 요금 없이 한 블록을 이동할 때마다 요금이 붙는 완전한 거리비례 요금제이며, 한 블록을 이동하는 데 A원을 낸다. 이런 합리적인 요금제로 비용을 아낀 대신, ㅇㅇ시의 택시는 손님을 한 명밖에 태우지 못하는 크기가 되었다.

셔틀버스는 거리와 상관없이 B원을 내면 40명까지 탈 수 있다. 하지만 중간에 정차하지 않고 특정 블록에서 바로 놀이동산으로 이동한다.

예를 들어 블록당 택시 요금 A=1원, 버스 요금 B=20원이고, 입장권을 예약한 7명이 각각 10번, 30번, 20번, 10번, 90번, 100번, 110번 블록에 산다고 하자. 7명이 모두 택시를 타고 이동하면 370원이 든다. 하지만 버스를 적절한 위치에서 부르면 비용을 다음과 같이 줄일 수 있다.

  1. 20번 블록에 사는 사람이 30번 블록으로 택시를 타고 간 후, 30번 블록에서 두 사람이 버스를 타고 놀이동산으로 이동한다. 비용은 총 30원이다.
  2. 90번과 110번 블록에 사는 사람이 100번 블록으로 택시를 타고 간 후, 100번 블록에서 세 사람이 버스를 타고 놀이동산으로 이동한다. 비용은 총 40원이다.
  3. 10번 블록에 사는 두 사람이 버스를 타고 이동한다. 비용은 총 20원이다. 두 사람이 각자 택시를 타고 가도 20원으로 결과는 같다.

이 경우 총 90원으로 모두 놀이동산에 도착할 수 있다.

놀이동산을 예약한 시민의 수 N, 각 시민이 사는 블록, 한 블록당 추가되는 택시 요금 A, 버스 요금 B가 주어졌을 때 드는 경비의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 놀이동산을 예약한 시민의 수 N(1 ≤ N ≤ 10000)이 주어진다.

둘째 줄에는 한 블록당 추가되는 택시 요금 A와 버스를 예약할 때 드는 비용 B가 빈칸을 사이에 두고 차례로 주어진다. (0 ≤ A ≤ 1,000, 0 ≤ B ≤ 100,000)

셋째 줄에 각 시민이 사는 블록의 번호가 주어진다.

출력

첫째 줄에 모든 인원이 놀이동산으로 이동하는 데 드는 총 경비의 최솟값을 출력한다.

예제1

  1. 예제 1

    입력
    7
    1 20
    10 30 20 10 90 100 110
    
    예상 출력
    90