품질 좋은 음식

시간 제한5초메모리 제한512 MB

요약
정해진 예산으로 배달료와 상하는 도시락 값을 치르며 1일부터 하루 한 끼씩 질 좋은 음식을 먹는 날을 가장 길게 이어갑니다.
난이도

보통10점 중 6점

유형
이분 탐색, 그리디, 정렬
정답자
아직 제출이 없습니다

문제

고향을 떠나 대도시로 이사했다. 새 환경은 다 마음에 드는데 음식만은 아니다. 고향 식당이 내던 음식(아래에서는 품질 좋은 음식이라고 부른다)이 계속 생각난다.

다행히 고향에서 가장 큰 식당이 배달을 한다. 한 번 배달할 때 음식을 원하는 만큼 살 수 있다. 배달 한 번마다 배달비가 붙고, 그 금액은 그 배달에서 음식을 얼마나 샀는지와 상관없이 항상 같다.

이 식당은 여러 종류의 음식을 판다. 각 종류에는 한 끼당 가격과 상하기까지의 기간이 있다. 한 끼는 하루치 식사이고, 한 번 먹은 끼니는 다시 먹을 수 없다. 상하기까지의 기간이 tt인 음식은 받은 날을 0일째로 셀 때 tt일째까지 먹을 수 있다. tt가 0이면 배달받은 날에 먹어야 한다.

한 번 배달에 돈이 허락하는 만큼 여러 종류를 섞어 살 수 있고, 각 종류를 몇 끼든 살 수 있다. 상하기까지의 기간이 tt인 음식을 한 번 배달에 t+1t + 1끼보다 많이 시키면 적어도 한 끼는 먹기 전에 상한다.

배달은 아주 빨라서 주문한 날에 음식을 모두 받고, 그날 바로 먹어도 된다. 품질 좋은 음식을 얻는 방법은 배달뿐이다.

가진 돈을 끼니 값과 배달비에 쓴다고 할 때, 1일째부터 하루도 거르지 않고 품질 좋은 음식을 먹을 수 있는 최대 일수를 구하라.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스의 첫 줄에는 세 정수 MM, FF, NN이 주어지고, 각각 가진 돈, 배달비, 식당이 파는 음식 종류의 수이다. 이어서 NN개의 줄이 주어지며, ii번째 줄에는 두 정수 PiP_i와 SiS_i가 주어진다. 각각 그 종류의 한 끼당 가격과 상하기까지의 기간이다.

제한

  • 1≤T≤501 \le T \le 50
  • 1≤F≤M1 \le F \le M
  • 1≤N≤2001 \le N \le 200
  • 1≤Pi≤M1 \le P_i \le M
  • 0≤Si≤2 000 0000 \le S_i \le 2\,000\,000
  • 1≤M≤2 000 0001 \le M \le 2\,000\,000

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 매일 품질 좋은 음식을 한 끼 이상 먹을 수 있는 최대 일수이다.

힌트

첫 번째 예제의 첫 케이스는 이렇게 3일을 채운다. 도시에서 보내는 첫날에 첫 번째 종류 한 끼와 두 번째 종류 한 끼를 사고(배달비까지 합쳐 20을 쓴다), 그날 첫 번째 종류를 먹은 뒤 다음 날 두 번째 종류를 먹는다. 셋째 날에 첫 번째 종류 한 끼를 다시 사서 그날 먹는다.

예제2

  1. 예제 1

    입력
    3
    32 5 2
    5 0
    10 2
    10 10 1
    10 10
    10 1 1
    1 5
    
    
    
    예상 출력
    Case #1: 3
    Case #2: 0
    Case #3: 8
    
  2. 예제 2

    입력
    4
    1 1 1
    1 0
    2 1 1
    1 0
    2 2 1
    1 0
    2000000 2000000 1
    1 2000000
    
    예상 출력
    Case #1: 0
    Case #2: 1
    Case #3: 0
    Case #4: 0