CosmoCraft

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

요약
매 턴 수입을 일꾼, 생산 시설, 군대로 나눠 모든 공격을 버티면서 마지막 턴의 군대를 최대로 만드는 최적 전략을 구한다.
난이도

어려움10점 중 8점

유형
그리디, 시뮬레이션, 수학, 구현
정답자
아직 제출이 없습니다

문제

2인용 전략 게임 CosmoCraft에서는 경제를 키워 상대를 물리칠 만큼 강한 군대를 양성해야 합니다. 여러분은 일꾼, 생산 시설, 군대를 관리하며, 게임의 핵심은 가진 돈을 이 셋에 어떻게 배분하느냐입니다. 게임은 턴 단위로 진행됩니다.

  • 일꾼은 매 턴 1달러의 수입을 줍니다.
  • 생산 시설은 한 턴에 한 번, 1달러를 들여 군대 1기 또는 일꾼 1명 중 하나를 생산할 수 있습니다(시설 하나가 한 턴에 만들 수 있는 것은 최대 1개).
  • 새 생산 시설을 짓는 데에는 1달러가 듭니다.
  • 군대는 상대와 싸우는 수단입니다.

여러분은 일꾼 nn명과 생산 시설 kk개로 시작합니다. 매 턴 먼저 현재 활동 중인 일꾼 수만큼 수입을 얻고(이전 턴에서 남겨 둔 돈에 합산됩니다), 그 돈으로 새 일꾼, 새 군대, 새 생산 시설을 원하는 대로 조합해 구매할 수 있습니다. 이번 턴에 만든 일꾼과 시설은 다음 턴부터 활동하지만, 군대는 즉시 사용할 수 있습니다. 쓰지 않은 돈은 다음 턴으로 이월됩니다.

상대는 처음 t−1t-1개의 각 턴이 끝날 때 여러분을 공격합니다. 턴 ii의 세기 aia_i인 공격을 버티려면 그 순간 보유한 군대 수가 aia_i 이상이어야 하며, 버틴 뒤에는 군대에서 aia_i기가 사라집니다(남은 만큼만 유지). 보유한 군대가 aia_i보다 적으면 패배합니다. 게임은 tt턴 동안 진행되며, 마지막 턴에는 들어오는 공격이 없습니다.

여러분은 이 상대와 여러 번 겨뤄 봐서 매 공격의 세기를 정확히 알고 있습니다. 그래서 철저히 수비적으로 플레이하기로 합니다. 즉, 모든 공격을 버티면서 마지막 반격을 위해 가능한 한 큰 군대를 비축합니다. 상대의 모든 공격을 버텨야 한다는 조건 아래, 게임이 끝났을 때 가질 수 있는 가장 큰 군대의 규모는 얼마입니까?

입력

입력에는 여러 개의 테스트 케이스가 있습니다. 각 테스트 케이스는 세 정수로 이루어진 줄로 시작합니다:

n k t

여기서 nn (1≤n≤1001 \le n \le 100)은 시작 일꾼 수, kk (1≤k≤1001 \le k \le 100)는 시작 생산 시설 수, tt (1≤t≤100001 \le t \le 10000)는 턴 수입니다. 다음 줄에는 공백 하나로 구분된 t−1t-1개의 정수 aia_i (0≤ai≤263−10 \le a_i \le 2^{63}-1)가 주어지며, aia_i는 턴 ii가 끝날 때 상대가 가하는 공격의 세기(사용하는 군대 수)입니다. 입력은 세 개의 0으로 이루어진 줄로 끝납니다.

출력

각 테스트 케이스에 대해 게임이 끝났을 때 가질 수 있는 가장 큰 군대의 규모를 정수 하나로 출력하세요. 모든 공격을 버티는 것이 불가능하면 −1-1을 출력합니다. 각 답은 한 줄에 하나씩, 여분의 공백이나 답 사이의 빈 줄 없이 출력하세요. 모든 유효한 입력의 답은 부호 있는 64비트 정수 범위에 들어가도록 보장됩니다.

예제1

  1. 예제 1

    입력
    8 4 6
    22 6 10 14 0 
    4 3 3
    0 0 
    6 9 7
    0 0 11 0 7 0 
    0 0 0
    
    예상 출력
    -1
    11
    101