피보나치 냅색

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

요약
무게가 피보나치 수인 물건들을 용량 C인 배낭에 담아 총 가치를 최대로 만드는 문제로, N은 50 이하이고 모든 수는 64비트 정수 범위에 들어온다.
난이도

어려움10점 중 8점

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

문제

물건 N개와 가방 하나가 있다. 각 물건에는 무게와 가격이 있고, 가방에는 총무게가 최대 C가 되도록 물건을 담을 수 있다. 가방에 담은 물건들의 가격 합이 최대가 되도록 물건을 고르려고 한다.

이는 0/1 냅색 문제이지만, 일반적인 O(2^N) 완전 탐색이나 O(N × 무게의 합) 동적 계획법으로는 제한 안에 풀 수 없다. 대신 모든 물건의 무게가 피보나치 수라는 조건이 주어진다.

이 문제에서 첫 번째와 두 번째 피보나치 수는 1과 2이다. 그 뒤의 수는 바로 앞 두 수의 합으로 정의되므로 수열은 1, 2, 3, 5, 8, 13, ... 으로 시작한다.

입력

첫째 줄에 N이 주어진다. N은 50 이하의 자연수이다.

다음 N개의 줄에는 각 물건의 무게와 가격이 공백으로 구분되어 주어진다. 무게와 가격은 모두 10^16 이하의 자연수이며, 모든 무게는 위에서 정의한 피보나치 수이다.

마지막 줄에는 가방이 담을 수 있는 최대 무게 C가 주어진다. C는 10^16 이하의 자연수이다.

출력

가방에 담을 수 있는 물건들의 가격 합의 최댓값을 출력한다.

예제5

  1. 예제 1

    입력
    3
    5 555
    8 195
    13 651
    15
    
    예상 출력
    750
    
  2. 예제 2

    입력
    3
    5 555
    8 195
    13 751
    15
    
    예상 출력
    751
    
  3. 예제 3

    입력
    6
    55 1562
    5 814
    55 1962
    8 996
    2 716
    34 1792
    94
    
    예상 출력
    4568
    
  4. 예제 4

    입력
    1
    13 89
    1
    
    예상 출력
    0
    
  5. 예제 5

    입력
    3
    27777890035288 9419696870097445
    53316291173 6312623457097563
    165580141 8848283653257131
    27777900000000
    
    예상 출력
    15160907110354694