만드는 중입니다

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

상현이의 수강신청 대작전

면접 대비

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

요약
각 과목의 선호도와 학점이 주어질 때, 총 학점이 M 이하이면서 선호도 합이 최대가 되도록 최소 한 과목을 고르고 그 번호를 출력합니다.
난이도

보통10점 중 5점

유형
동적 계획법, 배열
정답자
아직 제출이 없습니다

문제

KSA에서는 수강하고 싶은 과목을 골라 수강신청을 해야 한다. 상현이는 총 학점이 MM학점을 초과하면 GPA를 도저히 유지할 수 없을 것 같아, 총 학점을 MM학점 이하로 맞춰 과목을 신청하려고 한다. 수강신청 가능한 과목은 총 NN개이며, 1번부터 NN번까지 번호가 붙어 있다. ii번 과목에 대한 상현이의 선호도는 PiP_i이고, 학점은 CiC_i이다. 총 학점이 MM학점 이하이면서 선호도의 총합이 최대가 되도록 수강신청하는 방법을 구하는 프로그램을 작성하시오. 각 과목은 최대 한 번씩만 선택할 수 있으며, 최소 한 과목 이상을 신청해야 한다.

입력

첫 번째 줄에 두 정수 NN(1≤N≤50001 \le N \le 5000)과 MM(1≤M≤50001 \le M \le 5000)이 주어진다. 다음 NN개의 줄 중 ii번째 줄에는 두 정수 PiP_i(1≤Pi≤1051 \le P_i \le 10^5)와 CiC_i(1≤Ci≤50001 \le C_i \le 5000)이 주어진다.

출력

첫 번째 줄에 문제의 조건을 만족하는 수강신청 방법이 존재하면 신청할 과목의 수를 출력하고, 존재하지 않으면 -1을 출력한다. 방법이 존재하면 두 번째 줄에 신청할 과목의 번호를 오름차순으로 출력한다. 정답이 여러 개이면 그중 아무거나 출력해도 된다.

예제2

  1. 예제 1

    입력
    8 13
    1 1
    9 3
    18 2
    1 2
    13 3
    7 3
    19 4
    15 4
    
    예상 출력
    4
    3 5 7 8
    
  2. 예제 2

    입력
    3 2
    3 4
    7 3
    4 3
    
    예상 출력
    -1