아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

돕거나, 벌을 받거나

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

요약
도울 사람의 순서 있는 부분집합을 고르는데, 각 도움의 종료 시각이 누적되고 돕지 않은 사람마다 벌점이 붙으므로 예산 K 안에서 가장 큰 부분집합을 찾는다.
난이도

보통10점 중 7점

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

문제

금융 전문가들이 수감된 교정 시설에서 곧 연례 사회봉사 활동이 열린다. 각 참가자에게는 재정 문제를 도와줄 수 있는 NN명의 사람 집합 PP와 KK분의 시간 한도가 주어진다.

jj번째 사람(1≤j≤N1 \le j \le N)에 대해서는 두 정수가 알려져 있다. 그 사람에게 조언을 하지 않기로 선택하면 부과되는 벌점 eje_j와, 조언을 하는 데 필요한 시간 djd_j(분)이다.

참가자는 시간 T=0T = 0에 시작한다. 시간 TT에 jj번째 사람을 돕기 시작하면 늦어도 T+djT + d_j까지는 마쳐야 하며, 값 Cj=T+djC_j = T + d_j가 부과되고, 시간 T+djT + d_j가 되기 전에는 다른 사람을 도울 수 없다(사람들은 한 번에 한 명씩, 연달아 돕는다).

실제로 도움을 받은 사람들의 집합을 SS라 하면, 사용한 총 시간(분)은 다음과 같다.

∑x∈SCx+∑x∈P∖Sex.\sum_{x \in S} C_x + \sum_{x \in P \setminus S} e_x.

시간 한도 KK분을 넘기지 않으면서 한 참가자가 도울 수 있는 사람 수의 최댓값을 구하는 프로그램을 작성하여라.

입력

입력은 여러 참가자에 대한 자료로 이루어진다. 각 참가자의 자료는 공백 하나로 구분된 두 정수 NN과 KK가 있는 줄로 시작한다. 각각 사람 수와 시간 한도를 의미하며 0<N≤2000 < N \le 200, 0<K≤60000 < K \le 6000이다. 이어지는 NN개의 줄에는 각각 도움을 줄 한 사람의 벌점과 소요 시간을 나타내는 두 정수가 공백 하나로 구분되어 주어지며, 모든 정수는 00 이상 1000010000 이하이다. 입력은 두 개의 00이 있는 줄로 끝난다.

출력

각 참가자마다 i: X 형식의 한 줄을 출력한다. 여기서 i는 참가자가 등장한 순서대로 11부터 센 번호이고, X는 시간 한도 KK분을 넘기지 않으면서 도울 수 있는 사람 수의 최댓값이다. 사용한 총 시간을 KK 이내로 유지하는 것이 불가능하면 대신 i: Mission Impossible을 출력한다.

예제1

  1. 예제 1

    입력
    1 1000
    100 1000
    2 100
    1000 1000
    20 10
    1 1
    0 10000 
    4 293
    61 30
    295 39
    206 27
    94 85
    0 0
    
    예상 출력
    1: 1
    2: Mission Impossible
    3: 0
    4: 3