BOJ 18049 Cheese Game
BOJ 18049 Cheese Game
문제 내용
장의 카드가 일렬로 놓여 있습니다. 각 카드에 왼쪽부터 순서대로 양의 정수 이 쓰여 있습니다. 각 카드의 위치를 이라고 합시다.
두 사람이 다음과 같은 게임을 합니다.
- 두 사람이 번갈아서 턴을 진행합니다.
- 자신의 턴인 사람은 원하는 만큼의 카드를 선택하여 모두 가져갈 수 있습니다. 이때, 어떤 두 선택된 카드의 위치가 1 차이가 나면 안됩니다. 한 사람이 카드를 가져간 뒤에도, 남아있는 카드의 위치는 유지됩니다.
- 각 사람의 목표는 자신이 가져간 모든 카드에 쓰인 수의 총합을 최대화하는 것입니다.
두 사람이 최선의 플레이를 할 때, 선공이 얻을 수 있는 카드의 값들의 합의 최댓값을 구하세요.
입력
첫 번째 줄에는 테스트 케이스의 개수 가 주어집니다. ()
각 테스트 케이스에 대해, 첫 번째 줄에는 카드의 수 이 주어집니다. ()
두 번째 줄에는 이 주어집니다. ()
출력
각 테스트 케이스에 대해, 문제의 정답을 한 줄에 출력합니다.
문제 풀이
스포일러
선공이 카드들을 모두 가져가고 나서 남은 카드들을 연속한 그룹으로 나누어 생각해 봅시다.
- 1장짜리 그룹은 후공이 가져갈 수 있습니다.
- 2장짜리 그룹에서는 후공이 둘 중 큰 것을 가져갈 수 있습니다. 선공은 남은 카드를 가져갑니다.
- 3장 이상의 그룹에서는 후공이 선공처럼 행동할 수 있습니다. 선공은 모든 그룹을 한 장 또는 두 장이 되도록 가져갈 수 있지만 그러지 않았기 때문에, 후공에게는 선택권이 증가하는 효과가 있습니다. 따라서 이는 선공에게 최적이 아닙니다.
따라서, 선공이 가져갈 수 있는 카드의 최대 합은 다음과 같이 DP로 구할 수 있습니다.
- 먼저 1번 또는 2번 카드를 선택합니다.
DP[i]를 “첫 턴에 번 카드를 선택했을 때 번 카드 중에서 얻을 수 있는 최대 합"으로 정의하면, 선택권은 두 가지가 있습니다.DP[i-3]처럼 행동한 뒤 과 번 카드를 남기고, 다음 턴에 둘 중 작은 값을 얻습니다.DP[i-2]처럼 행동한 뒤 번 카드를 남깁니다.
- 둘 중에서 합이 큰 것을 선택합니다.
Last updated on