상현이의 수강신청 대작전

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

요약
총 학점이 M 이하가 되도록 한 과목 이상을 골라 선호도 합을 최대로 만들고, 고른 과목 번호를 출력한다.
난이도

보통10점 중 6점

유형
동적 계획법, 완전 탐색, 그리디
정답자
아직 제출이 없습니다

문제

KSA에서는 자신이 수강하고 싶은 과목을 골라 수강신청을 해야한다. 상현이는 총 학점이 MM학점 초과가 되도록 신청하면 도저히 GPA를 유지할 수 없을 것 같아 MM학점 이하로 과목들을 골라 신청하고자 한다. 수강신청 가능한 과목은 총 NN개이며, 11부터 NN까지의 번호가 붙여져 있다. ii번 과목에 대한 상현이의 선호도는 P_iP\_i이고, 학점은 C_iC\_i이다. 이때 총 학점이 MM학점 이하면서 선호도의 총합이 최대화되도록 수강신청을 하는 방법을 구하는 프로그램을 작성하시오. (단, 각 과목은 최대 한 번씩만 선택할 수 있으며, 최소 한 과목 이상을 신청해야 한다.)

입력

첫 번째 줄에 두 개의 정수 N$$(1 \le N \le 5000)과 M$$(1 \le M \le 5000)이 주어진다.

다음의 NN개의 줄 중 ii번째 줄에 두 개의 정수 P\_i$$(1 \le P\_i \le 10^5)와 C\_i$$(1 \le C\_i \le 5000)이 주어진다.

출력

첫 번째 줄에 문제의 조건에 따라 수강신청을 하는 방법이 존재한다면 신청할 과목의 수를 출력하고, 아니라면 −1-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