문제 링크
- http://icpc.me/10714
문제 출처
- 2015 JOI 2번
사용 알고리즘
- DP
시간복잡도
- O(N2)
풀이
이 문제처럼 DP로 풀 수 있습니다.
i번째 조각을 기준으로 i-1번째를 왼쪽, i+1번째를 오른쪽이라고 합시다.
현재 상황까지 가져간 가장 왼쪽 위치는 l, 가장 오른쪽 위치를 r이라고 할 때 최댓값을 dp[l][r]로 정의합시다.
ioi의 차례에서는 (l-1)번째와 (r+1)번째 중에서 더 큰 값을 가져가면 됩니다.
joi의 차례에서는 (l-1)번째와 (r+1)번째를 가져갔을 때, 최종적으로 더 큰 결과를 갖게 되는 쪽을 택하면 됩니다.
엄밀하게 말하면, (l-1)과 (r+1)번째가 아닌 (l-1+n)%n과 (r+1)%n번째를 가져가면 됩니다.
상태 공간은 O(N2)개이고, 각각의 상태 공간에서 값을 구하는데 상수 시간이 걸리므로 시간 복잡도는 O(N2)이 됩니다.
전체 코드
1 |
|