만드는 중입니다

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

어메이징 레이스

시간 제한5초메모리 제한256 MB

요약
이동 시간과 작업 시간, 마감 시각을 고려해 T분 안에 출발지에서 도착지까지 이동하며 얻는 점수 합을 최대로 합니다.
난이도

보통10점 중 7점

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

문제

프로그래밍 대회 참가자를 위한 보물찾기 경주를 연다. 출발 지점과 도착 지점 외에 참가자가 들를 장소가 nn개 있고, n≤20n \le 20이다. 장소 ii(1≤i≤n1 \le i \le n)에는 과제가 하나씩 있어서 그 과제를 수행하면 pip_i점을 얻고, 과제를 끝내는 데 tit_i분이 걸린다. 각 과제는 한 번만 수행할 수 있으므로 같은 장소를 두 번 방문하지 않는다. 경주가 시작된 뒤에는 출발 지점으로 돌아갈 수 없고, 도착 지점에 들어서는 순간 경주가 끝난다.

경주는 TT분 안에 마쳐야 한다. 즉 출발 지점을 떠난 시각과 도착 지점에 닿은 시각의 차이가 TT분을 넘으면 안 된다. 일부 과제에는 마감 did_i가 있는데, 출발 지점을 떠난 뒤 did_i분 안에 그 과제를 끝내야 한다는 뜻이다. 장소 ii에 도착하면 그 장소의 과제를 반드시 수행해야 하므로, 마감까지 과제를 끝낼 수 없을 만큼 늦게 도착하는 일정이라면 그 장소로 이동하는 것 자체가 허용되지 않는다.

과제로 얻을 수 있는 점수 합의 최댓값을 구하여라.

입력

첫째 줄에 양의 정수 nn과 TT가 주어진다(T≤1440T \le 1440). 다음 nn개 줄에는 각각 세 정수 pip_i(1≤pi≤1001 \le p_i \le 100), tit_i(1≤ti≤14401 \le t_i \le 1440), did_i(−1≤di≤1440-1 \le d_i \le 1440)가 주어진다. di=−1d_i = -1이면 과제 ii에 마감이 없다. 마지막 n+2n+2개 줄에는 각각 음이 아닌 정수 n+2n+2개가 주어진다. ii번째 줄의 jj번째 수는 장소 ii에서 장소 jj로 이동하는 데 걸리는 시간(분)이고 1440 이하이다. 출발 지점의 번호는 n+1n+1, 도착 지점의 번호는 n+2n+2이다.

같은 장소로 이동하는 시간은 0이다. 오르막과 내리막처럼 방향에 따라 걸리는 시간이 달라질 수 있어서, 두 장소 사이의 이동 시간은 양방향이 같지 않을 수 있다.

출력

첫째 줄에 얻을 수 있는 점수 합의 최댓값을 출력한다. 둘째 줄에는 그 최댓값을 얻으려고 수행하는 과제의 번호를 증가하는 순서로, 공백 하나로 구분해 출력한다. 최댓값을 얻는 과제 집합이 여럿이면 사전순으로 가장 앞선 것을 출력한다. 즉 집합의 첫 번째 번호를 가능한 한 작게 하고, 같으면 두 번째 번호를 가능한 한 작게 하는 식으로 정한다.

얻을 수 있는 점수의 최댓값이 0이면 둘째 줄은 빈 줄로 출력한다.

예제2

  1. 예제 1

    입력
    3 352
    93 82 444
    92 76 436
    99 62 -1
    0 70 66 71 97
    76 0 87 66 74
    62 90 0 60 94
    60 68 68 0 69
    83 78 83 73 0
    
    예상 출력
    99
    3
    
  2. 예제 2

    입력
    5 696
    96 88 532
    99 70 519
    96 66 637
    90 92 592
    95 94 -1
    0 67 80 81 60 83 61
    72 0 99 68 85 93 82
    100 91 0 88 99 70 68
    69 65 77 0 65 68 75
    63 65 91 96 0 92 100
    65 76 85 62 89 0 75
    93 83 74 65 88 84 0
    
    예상 출력
    386
    1 2 3 5