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

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

치즈 탑

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

요약
높이 합이 T 이하가 되도록 치즈 블록을 쌓되, 높이가 K 이상인 블록은 아래 블록을 모두 4/5 높이로 압축할 때 얻을 수 있는 최대 가치를 구한다.
난이도

보통10점 중 7점

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

문제

치즈 블록들을 높이가 최대 TT (1≤T≤10001 \le T \le 1000)인 하나의 탑으로 쌓아 보관하려고 합니다.

치즈는 11번부터 NN번까지 번호가 매겨진 NN (1≤N≤1001 \le N \le 100)가지 종류가 있고, 각 종류의 블록은 원하는 만큼 얼마든지 사용할 수 있습니다. ii번 종류의 블록은 가치 ViV_i (1≤Vi≤1061 \le V_i \le 10^6)와 높이 HiH_i (5≤Hi≤T5 \le H_i \le T)를 가지며, 모든 HiH_i는 55의 배수입니다.

치즈는 눌리면 압축됩니다. 높이가 KK (1≤K≤T1 \le K \le T) 이상인 블록을 큰 블록이라고 부릅니다. 큰 블록은 탑에서 자신보다 아래에 있는 모든 블록(다른 큰 블록 포함)을 짓누릅니다. 짓눌린 블록은 가치는 그대로지만 높이가 원래의 정확히 4/54/5로 줄어듭니다. 모든 높이가 55의 배수이므로 짓눌린 높이는 항상 정수가 됩니다. 짓눌림은 전부 아니면 전무입니다. 즉, 블록은 짓눌리거나 짓눌리지 않을 뿐, 위에 큰 블록이 여러 개 있다고 해서 더 많이 짓눌리지는 않습니다. 어떤 블록이 큰 블록인지는 오직 그 블록 자신의 높이로만 정해지며, 탑 전체의 높이와는 무관합니다.

총 높이가 TT 이하인 탑 중에서 블록들의 가치 합이 최대가 되도록 쌓고, 그 최대 가치 합을 출력하세요.

예를 들어, 탑의 최대 높이가 5353이고 높이가 2525 이상인 블록이 큰 블록이며 치즈가 세 종류라고 합시다.

Type    Value    Height
  1      100       25
  2       20        5
  3       40       10

만들 수 있는 탑의 한 예는 다음과 같습니다.

          Type  Height  Value
   top -> [1]     25     100
          [2]      4      20   (crushed by [1] above)
          [3]      8      40   (crushed by [1] above)
          [3]      8      40   (crushed by [1] above)
bottom -> [3]      8      40   (crushed by [1] above)

맨 위의 큰 블록이 그 아래의 모든 블록을 짓누릅니다. 총 높이는 25+4+8+8+8=53≤5325 + 4 + 8 + 8 + 8 = 53 \le 53으로 규칙에 맞고, 총 가치는 100+20+40+40+40=240100 + 20 + 40 + 40 + 40 = 240입니다. 이것이 이 블록 집합으로 만들 수 있는 가장 좋은 탑입니다.

입력

  • 첫째 줄: 공백으로 구분된 세 정수 NN, TT, KK.
  • 둘째 줄부터 N+1N+1째 줄까지: i+1i+1째 줄에는 공백으로 구분된 두 정수 ViV_i와 HiH_i가 주어집니다.

출력

  • 한 줄에 만들 수 있는 탑의 최대 가치 합을 출력합니다.

예제2

  1. 예제 1

    입력
    3 53 25
    100 25
    20 5
    40 10
    
    예상 출력
    240
    
  2. 예제 2

    입력
    2 30 5
    10 5
    100 30
    
    예상 출력
    110