만드는 중입니다

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

롤플레잉 게임

면접 대비

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

요약
선행 과제를 모두 마친 과제만 골라 총 시간이 m분을 넘지 않게 하면서 얻는 경험치의 합을 최대로 만들고, 그 완료 순서를 출력합니다.
난이도

보통10점 중 5점

유형
동적 계획법, 비트 연산
정답자
아직 제출이 없습니다

문제

제냐는 여유 시간이 생기면 좋아하는 롤플레잉 게임을 한다. 그의 꿈은 255 레벨에 도달하는 것, 즉 그 레벨에 필요한 경험치를 모으는 것이다. 여유 시간이 많지 않아서 제냐는 그 시간을 최대한 효율적으로 쓰고 싶어 한다. 제냐를 도와주자.

경험치는 과제를 수행해서 얻는다. 각 과제에는 수행하는 데 걸리는 시간, 얻는 경험치, 그리고 그 과제를 시작하기 전에 먼저 수행해야 하는 과제 목록이 있다.

제냐가 여유 시간 동안 얻을 수 있는 경험치의 최댓값을 구하라.

입력

첫 줄에 두 정수 nn과 mm (1≤n≤161 \le n \le 16, 1≤m≤10001 \le m \le 1000)이 주어진다. nn은 과제의 개수, mm은 제냐의 여유 시간(분)이다. 이어서 nn개의 줄에 과제 정보가 한 줄에 하나씩 주어진다. 각 줄은 정수 tit_i, pip_i, kik_i (1≤ti,pi≤10001 \le t_i, p_i \le 1000, 0≤ki<n0 \le k_i < n)로 시작한다. 각각 과제 ii를 수행하는 데 걸리는 시간(분), 과제를 수행했을 때 얻는 경험치, 과제 ii 이전에 수행해야 하는 과제의 개수다. 이어서 kik_i개의 서로 다른 정수가 1부터 nn 사이의 과제 번호로 주어진다.

출력

첫 줄에 제냐가 여유 시간 동안 얻을 수 있는 경험치의 최댓값을 한 정수로 출력한다. 둘째 줄에는 그 경험치를 얻기 위해 수행해야 하는 과제의 번호를 수행 순서대로 출력한다.

예제2

  1. 예제 1

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

    입력
    3 9
    4 1 0
    5 2 1 1
    6 3 1 1
    
    예상 출력
    3
    1 2