업무 줄이기

면접 대비

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

요약
단위당 비용 A와 절반 비용 B를 가진 각 업체별로 N을 정확히 M까지 줄이는 최소 비용을 구한다.
난이도

보통10점 중 6점

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

문제

책상 위에 서류 작업이 쌓이기 시작했고, 직장 내 긴장도 높아지고 있습니다. 상사는 오늘 안에 진전을 보이지 못하면 당신을 해고하겠다고 으름장을 놓았습니다. 현재 책상 위에는 NN개의 서류 업무가 있으며, 상사는 하루가 끝날 때 정확히 MM개의 서류 업무만 남아 있기를 요구합니다.

이제 유일한 희망은 도움을 고용하는 것입니다. 서류 업무를 줄여 주는 여러 대행사가 있으며, 각 대행사는 다음 두 가지 작업을 제공합니다.

  • 비용 $A 를 내면 서류 업무를 1개 줄여 줍니다.
  • 비용 $B 를 내면 현재 서류 업무 전체를 절반으로 줄여 줍니다(홀수일 때는 내림).

서류 업무는 절대 0개 미만으로 줄일 수 없습니다.

당신의 임무는 각 대행사 이름과 그 대행사를 이용해 문제를 해결하는 데 드는 최소 비용을 담은 정렬된 표를 출력하는 것입니다.

입력

입력의 첫 줄에는 테스트 케이스의 개수를 나타내는 양의 정수가 하나 주어집니다. 각 테스트 케이스는 공백으로 구분된 세 개의 양의 정수 NN, MM, LL로 시작합니다. NN은 시작 업무량, MM은 목표 업무량, LL은 이용 가능한 대행사의 수이며 (1≤M≤N≤1000001 \le M \le N \le 100000, 1≤L≤1001 \le L \le 100) 입니다. 이어지는 LL개의 줄은 각각 이름:A,B 형식이며, AA와 BB는 위에서 설명한 해당 대행사의 요금입니다(0≤A,B≤100000 \le A, B \le 10000). 대행사 이름의 길이는 1자 이상 16자 이하이고 대문자 알파벳으로만 이루어지며, 서로 겹치지 않습니다.

출력

각 테스트 케이스마다 먼저 Case X를 한 줄에 출력합니다. 여기서 XX는 테스트 케이스 번호입니다. 그 뒤에 각 대행사 이름과 해당 대행사의 최소 비용을 최소 비용의 오름차순으로 정렬하여 출력합니다. 최소 비용이 같은 대행사들은 이름의 알파벳 순으로 정렬합니다. 표의 각 줄에는 대행사 이름, 공백, 그리고 그 대행사가 문제를 해결하는 데 필요한 최소 비용을 차례로 출력합니다.

예제1

  1. 예제 1

    입력
    2
    100 5 3
    A:1,10
    B:2,5
    C:3,1
    1123 1122 5
    B:50,300
    A:1,1000
    C:10,10
    D:1,50
    E:0,0
    
    예상 출력
    Case 1
    C 7
    B 22
    A 37
    Case 2
    E 0
    A 1
    D 1
    C 10
    B 50