ICPC 최적 제출 전략

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

요약
최대 15개 문제의 풀이 시간이 주어질 때, 세 명이 300분 안에 병렬로 풀어 푼 개수를 최대화하고 그다음 총 완료 시간 합을 최소화하며, 동률이면 사전순으로 가장 앞선 제출 순서를 찾는다.
난이도

어려움10점 중 8점

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

문제

세 명으로 이루어진 팀이 ICPC 형식의 프로그래밍 대회에 참가한다. 대회 시간은 정확히 300분이다.

팀의 점수는 해결한 각 문제에 대해 소요된 시간의 총합이다. 해결한 문제의 소요 시간은 대회 시작부터 그 문제의 첫 정답 제출까지 걸린 시간(분)에, 그 문제에 대해 이전에 틀린 제출마다 20분의 벌점을 더한 값이다. 풀지 못한 문제는 점수에 영향을 주지 않는다.

최적 전략의 한 가지 요소는 오답을 전혀 제출하지 않는 것이다. 그러면 벌점 시간을 신경 쓸 필요가 없으므로, 남은 결정은 문제를 어떤 순서로 제출할지뿐이다.

팀은 각 문제의 풀이에 필요한 시간을 정확히 추정할 수 있다고 가정한다. 세 명은 모두 같은 문제에 매달리는 대신 서로 다른 문제를 생각하며, 각자는 무한히 빠르게 타이핑하고, 생각하는 동안에는 터미널을 사용하지 않는다. 따라서 최대 세 문제가 동시에 진행될 수 있으며, 세 명이 같은 분에 각각 문제를 제출하는 것도 가능하다.

문제는 대회 300분 이내에 제출된 경우에만 해결한 것으로 인정된다. 가능한 한 많은 문제를 해결하고, 그중에서 가능한 한 좋은(가장 작은) 점수를 얻는 전략을 구하라. 같은 수의 문제를 같은 점수로 해결하는 전략이 여러 개라면, 사전순으로 가장 앞서는 제출 순서를 출력한다.

입력

첫 번째 줄에는 정수 nn (0<n<1000 < n < 100)이 주어지며, 이는 데이터 집합의 개수(문제 묶음마다 하나)이다. 이어지는 nn개의 줄이 각각 하나의 데이터 집합을 나타낸다. 각 줄은 정수 kk (5≤k≤155 \le k \le 15)로 시작하며, 이는 그 데이터 집합에 포함된 문제의 개수이다. 그 뒤에 kk개의 정수가 이어지며, 각각은 11 이상 300300 이하이고 각 문제를 푸는 데 필요한 추정 시간을 나타낸다. 문제는 주어진 순서대로 대문자 A,B,C,…A, B, C, \ldots 로 라벨링된다. 대회 시간은 정확히 300300분이다.

출력

각 데이터 집합마다 한 줄을 출력한다. 그 줄에는 다음을 차례로 출력한다: Data set X: (여기서 XX는 11부터 시작하는 데이터 집합 번호), 제출되는 순서대로 나열한 해결한 문제들의 라벨, 해결한 문제의 총 개수, 그리고 최종 벌점 점수. 한 줄의 모든 항목은 하나의 공백으로 구분된다.

예제2

  1. 예제 1

    입력
    4
    9 25 50 100 150 100 100 150 225 300
    10 60 120 99 129 15 150 225 135 50 123
    12 6 60 99 45 135 66 231 63 96 39 50 123
    15 75 75 75 75 75 75 75 75 75 75 75 75 75 75 75
    
    예상 출력
    Data set 1: A B C D E F G H 8 1450
    Data set 2: E I A J C B F H D 9 1473
    Data set 3: A J D B K F H I C E L 11 1452
    Data set 4: A B C D E F G H I J K L 12 2250
    
  2. 예제 2

    입력
    1
    5 10 20 30 40 50
    
    예상 출력
    Data set 1: A B C D E 5 180