BOJ 18049 Cheese Game

BOJ 18049 Cheese Game

문제 링크:

문제 내용

nn장의 카드가 일렬로 놓여 있습니다. 각 카드에 왼쪽부터 순서대로 양의 정수 a1,a2,,ana_1, a_2, \cdots, a_n이 쓰여 있습니다. 각 카드의 위치를 1,2,,n1, 2, \cdots, n이라고 합시다.

두 사람이 다음과 같은 게임을 합니다.

  • 두 사람이 번갈아서 턴을 진행합니다.
  • 자신의 턴인 사람은 원하는 만큼의 카드를 선택하여 모두 가져갈 수 있습니다. 이때, 어떤 두 선택된 카드의 위치가 1 차이가 나면 안됩니다. 한 사람이 카드를 가져간 뒤에도, 남아있는 카드의 위치는 유지됩니다.
  • 각 사람의 목표는 자신이 가져간 모든 카드에 쓰인 수의 총합을 최대화하는 것입니다.

두 사람이 최선의 플레이를 할 때, 선공이 얻을 수 있는 카드의 값들의 합의 최댓값을 구하세요.

입력

첫 번째 줄에는 테스트 케이스의 개수 TT가 주어집니다. (1T201 \le T \le 20)

각 테스트 케이스에 대해, 첫 번째 줄에는 카드의 수 nn이 주어집니다. (1n100  0001 \le n \le 100\;000)

두 번째 줄에는 a1,a2,,ana_1, a_2, \cdots, a_n이 주어집니다. (1ai1  000  0001 \le a_i \le 1\;000\;000)

출력

각 테스트 케이스에 대해, 문제의 정답을 한 줄에 출력합니다.

문제 풀이

스포일러

선공이 카드들을 모두 가져가고 나서 남은 카드들을 연속한 그룹으로 나누어 생각해 봅시다.

  • 1장짜리 그룹은 후공이 가져갈 수 있습니다.
  • 2장짜리 그룹에서는 후공이 둘 중 큰 것을 가져갈 수 있습니다. 선공은 남은 카드를 가져갑니다.
  • 3장 이상의 그룹에서는 후공이 선공처럼 행동할 수 있습니다. 선공은 모든 그룹을 한 장 또는 두 장이 되도록 가져갈 수 있지만 그러지 않았기 때문에, 후공에게는 선택권이 증가하는 효과가 있습니다. 따라서 이는 선공에게 최적이 아닙니다.

따라서, 선공이 가져갈 수 있는 카드의 최대 합은 다음과 같이 DP로 구할 수 있습니다.

  • 먼저 1번 또는 2번 카드를 선택합니다.
  • DP[i]를 “첫 턴에 ii번 카드를 선택했을 때 1,,i1, \cdots, i번 카드 중에서 얻을 수 있는 최대 합"으로 정의하면, 선택권은 두 가지가 있습니다.
    • DP[i-3]처럼 행동한 뒤 i1i-1i2i-2번 카드를 남기고, 다음 턴에 둘 중 작은 값을 얻습니다.
    • DP[i-2]처럼 행동한 뒤 i1i-1번 카드를 남깁니다.
  • 둘 중에서 합이 큰 것을 선택합니다.
Last updated on