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

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

묵직한 동전 문제

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

요약
구매 대금으로 낼 동전을 골라, 남은 동전과 거스름돈의 무게 합이 최소가 되도록 하는 문제입니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그리디, 수학, 구현
정답자
아직 제출이 없습니다

문제

당신은 동전으로 물건값을 치르기를 좋아하지만 문제가 하나 있습니다. 잔돈이 너무 많아 주머니가 무거워졌습니다. 이 무게를 줄일 계획을 세웠고, 그 계획을 실행할 프로그램이 필요합니다.

다음에 살 물건의 값은 CC센트입니다. 가진 동전 중 일부를 골라 총액이 CC 이상이 되도록 지불하며, 더 많이 내면 가게가 거스름돈을 돌려줍니다. 지불이 끝난 뒤 주머니에 남는 동전들 — 즉 지불하지 않은 동전과 가게가 거슬러 준 동전 — 의 총 무게가 가장 작아지도록 어떤 동전을 낼지 고르세요.

가게가 당신에게 XX센트를 거슬러 줘야 할 때는 탐욕적으로 거스름돈을 만듭니다. 값이 XX 이하인 액면 중 가장 큰 동전 하나를 주고 그 값만큼 XX에서 빼며, XX가 00이 될 때까지 이를 반복합니다. 가게는 모든 액면의 동전을 무제한으로 가지고 있습니다.

액면은 DD가지입니다. ii번째 액면은 정수 값 ViV_i(센트)와 무게 WiW_i(그램)를 가집니다. 정확히 한 액면의 값이 11이며, 값이 같은 액면은 없습니다.

당신은 KK개의 동전을 가지고 있고, jj번째 동전의 액면은 DjD_j입니다.

제약: 1≤C≤1000001 \le C \le 100000, 1≤D≤1001 \le D \le 100, 1≤K≤1001 \le K \le 100, 1≤Vi≤20001 \le V_i \le 2000, 0<Wi<100 < W_i < 10(소수 둘째 자리까지 주어짐), 1≤Dj≤D1 \le D_j \le D.

입력

첫 줄에 정수 세 개 CC, DD, KK가 주어집니다. 각각 물건값(센트), 동전 액면의 수, 당신이 가진 동전의 수입니다.

다음 DD개의 줄에는 정수 ViV_i와 (정확히 소수 둘째 자리까지 주어지는) 실수 WiW_i가 주어집니다. 각각 ii번째 액면의 값(센트)과 무게(그램)입니다.

다음 KK개의 줄에는 정수 DjD_j가 하나씩 주어집니다. jj번째 동전의 액면 번호(1부터 시작)입니다.

출력

물건을 살 수 있다면 달성 가능한 최소 총 무게를 그램 단위로 소수 둘째 자리까지 반올림하여 출력합니다(답은 항상 0.010.01의 정확한 배수입니다). 살 수 없다면 too poor를 출력합니다.

힌트

5센트 동전 일곱 개를 가지고 3센트짜리 물건을 산다고 합시다. 액면은 1, 5, 10, 20센트이며 무게는 각각 1, 2, 1, 9그램입니다.

한 가지 최적해는 5센트 동전 세 개를 내는 것입니다. 그러면 가게가 12센트를 거슬러 주며 10센트 하나와 1센트 둘을 돌려줍니다. 다른 최적해는 5센트 동전 네 개를 내는 것으로, 가게가 17센트를 거슬러 주며 10센트 하나, 5센트 하나, 1센트 둘을 돌려줍니다. 두 경우 모두 주머니에 11.0011.00그램이 남습니다.

예제3

  1. 예제 1

    입력
    3 4 7
    1 1.00
    5 2.00
    20 9.00
    10 1.00
    2
    2
    2
    2
    2
    2
    2
    
    예상 출력
    11.00
    
  2. 예제 2

    입력
    100 1 1
    1 5.00
    1
    
    예상 출력
    too poor
    
  3. 예제 3

    입력
    5 2 1
    1 1.00
    5 3.00
    2
    
    예상 출력
    0.00