n개의 문제로 이루어진 프로그래밍 대회에 참가한다. 문제를 한 번 읽으면 그 문제를 푸는 데 걸리는 시간을 정확히 알아낼 수 있고, 읽는 시간은 0이라고 본다. 다만 머릿속에 동시에 담아 둘 수 있는 문제는 최대 k개다.
i번째 문제를 푸는 데 걸리는 시간을 ti라고 하자. 대회 전략은 다음과 같다.
- 처음 k개의 문제를 읽는다.
- 읽어 둔 문제 가운데 아직 풀지 않았고 푸는 시간이 가장 짧은 문제를 고른다. 가장 짧은 문제가 여러 개면 그중 아무것이나 고른다.
- 고른 문제를 풀고, 아직 읽지 않은 문제가 남아 있으면 그다음 문제를 읽는다.
- 풀지 않은 문제가 남아 있으면 2번으로 돌아간다.
한 문제의 제출 시각은 대회 시작부터 그 문제를 다 푼 순간까지 흐른 시간이다. 페널티 시간은 모든 문제의 제출 시각을 더한 값이다. 문제의 순서가 주어질 때 이 전략의 페널티 시간을 구한다.
2번에서 어느 문제를 고르든 페널티 시간은 같으므로 답은 하나로 정해진다.