만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

그리디 배낭 문제

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

요약
무게 W_i와 가치 V_i를 가진 N개의 물건을 1번부터 차례로 넣는 탐욕 알고리즘에서, 용량 M을 1부터 T까지 바꿔 얻을 수 있는 가치의 최댓값을 구합니다.
난이도

어려움10점 중 8점

유형
그리디, 시뮬레이션, 누적 합
정답자
아직 제출이 없습니다

문제

부디는 대학교 수업에서 배운 고전적인 0-1 배낭 문제를 우연히 다시 보게 되었다. 아이템은 1번부터 NN번까지 NN개가 있다. ii번 아이템은 양의 무게 WiW_i와 양의 가치 ViV_i를 가진다. 목표는 아이템을 0개 이상 골라 무게 합이 MM을 넘지 않으면서 가치 합을 최대로 만드는 것이다.

부디는 한동안 이 문제를 풀지 않아서 해법이 기억나지 않았다. 그래서 그리디 알고리즘을 고안했다. 이 알고리즘은 1번 아이템부터 NN번 아이템까지 차례로 확인한다. ii번 아이템을 넣어도 무게 합이 MM을 넘지 않으면 그 아이템을 고르고, 그렇지 않으면 건너뛴다. 출력은 고른 아이템 가치의 합이다.

GreedyKnapsack(W[1..N], V[1..N], M):
   total_value = 0
   total_weight = 0
   for i = 1 to N:
      if total_weight + W[i] ≤ M:
         total_weight = total_weight + W[i]
         total_value = total_value + V[i]
   return total_value

부디도 이 그리디 알고리즘이 최적해를 항상 찾지는 못한다는 것을 알고 있지만, 지금은 개의치 않는다. 출력이 MM에 따라 크게 달라진다는 점에 주목한 그는 MM을 1부터 주어진 상한 TT까지 바꿔 가며 그리디 알고리즘을 실행하고, 얻을 수 있는 출력의 최댓값을 구하려고 한다.

예를 들어 N=5N = 5, T=10T = 10, W1..5={10,1,2,3,4}W_{1..5} = \{10, 1, 2, 3, 4\}, V1..5={1,1,1,1,1}V_{1..5} = \{1, 1, 1, 1, 1\}인 경우를 보자. 얻을 수 있는 출력의 최댓값은 3이며, 예를 들어 M=6M = 6일 때 나온다. 그리디 알고리즘은 2번, 3번, 4번 아이템을 고르고, 무게 합은 1+2+3=61 + 2 + 3 = 6, 가치 합은 1+1+1=31 + 1 + 1 = 3이 된다. M=10M = 10이면 1번 아이템만 고르며, 무게 합은 10, 가치 합은 1이다.

당신의 임무는 MM을 1부터 TT까지 바꿔 가며 그리디 알고리즘이 얻을 수 있는 출력의 최댓값을 구하는 것이다.

입력

첫 줄에 두 정수 NN과 TT가 주어진다 (1≤N≤100 0001 \le N \le 100\,000; 1≤T≤10101 \le T \le 10^{10}). NN은 아이템의 개수이고 TT는 MM의 상한이다. 둘째 줄에는 각 아이템의 무게 WiW_i (1≤Wi≤100 0001 \le W_i \le 100\,000) NN개가, 셋째 줄에는 각 아이템의 가치 ViV_i (1≤Vi≤100 0001 \le V_i \le 100\,000) NN개가 주어진다.

출력

얻을 수 있는 출력의 최댓값을 정수 한 개로 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    5 10
    10 1 2 3 4
    1 1 1 1 1
    
    예상 출력
    3
    
  2. 예제 2

    입력
    5 10000000000
    10 1 2 3 4
    30 2 15 7 11
    
    예상 출력
    65
    
  3. 예제 3

    입력
    5 20
    4 9 5 1 3
    203 175 131 218 304
    
    예상 출력
    900