대출 스케줄링
시간 제한1초메모리 제한128 MB
마감 시한과 이익이 있는 대출 신청들 중, 시간당 처리 용량 제한을 지키면서 마감 전에 배정 가능한 최대 이익의 부분집합을 구합니다.
문제
은행은 어떤 대출 신청을 승인할지 결정해야 합니다. 신청들의 집합 이 있고, 각 신청 에는 승인 마감 시각 가 있습니다. 신청 를 승인하면 요청된 대출을 를 만족하는 정수 시각 에 지급해야 하며, 승인 시 은행은 이익 를 얻습니다.
시간은 은행이 모든 신청을 한꺼번에 결정하는 시각 부터 정수 단위로 측정됩니다. 은행은 임의의 한 시각에 최대 건의 대출만 지급할 수 있습니다. 은행의 목표는 오직 이익을 최대화하는 것으로, 승인한 각 대출을 마감 시각 이내의 시간 슬롯(각 시간 단위에는 최대 건의 지급이 가능)에 배정할 수 있다는 조건 아래에서 를 최대로 하는 부분집합 를 고릅니다. 은행이 얻을 수 있는 최대 이익을 구하세요. 여러 개의 데이터 집합을 입력 텍스트 파일에서 읽어 처리하는 프로그램을 작성하세요.
예를 들어 이고 네 개의 신청 , , , 이 있을 때를 생각해 봅시다. 아래 표는 승인 가능한 모든 신청 집합과 대출 지급 일정을 보여 줍니다. 가장 높은 이익은 이며 집합 에 대응합니다. 신청 의 대출은 시각 에, 는 시각 에, 는 시각 에 지급합니다.
입력
입력에는 여러 개의 데이터 집합이 연달아 주어지며, 파일의 끝에서 종료됩니다. 각 데이터 집합은 두 정수 (, 신청의 개수)과 (, 은행이 한 시각에 지급할 수 있는 대출의 최대 개수)로 시작합니다. 이어서 개의 정수 쌍 (, )가 주어지며, 각각 신청 의 이익과 마감 시각을 나타냅니다. 입력 데이터는 공백으로 구분되고, 항상 올바르며, 파일의 끝에서 종료됩니다.
출력
각 데이터 집합마다 승인한 신청으로부터 은행이 얻을 수 있는 최대 이익을 표준 출력의 한 줄에 하나씩, 줄 맨 앞부터 출력합니다. 빈 줄은 출력하지 않습니다.