문제 링크
- http://icpc.me/2515
문제 출처
- 2012 전국 본선 중등2
사용 알고리즘
- DP
시간복잡도
- O(C + N)
풀이
dp[n]을 첫 번째부터 n번째까지의 그림만을 고려했을 때의 정답이라고 정의합시다.
i번째 그림을 무조건 전시한다고 할 때, 앞에 전시할 수 있는 가장 높은 그림의 번호를 dd[i]에 저장합시다. 반복문 1개를 이용하여 dd배열을 채울 수 있습니다.
이제 dp배열을 채워봅시다. 위에서 dp[i]는 첫 번째부터 i번째까지의 그림만을 고려했을 때의 정답이라고 정의했고, dd[i]는 i번째 그림을 무조건 전시할 때 그보다 앞에 전시할 수 있는 가장 높은 그림을 저장하고 있습니다.
그러면 i번째 사진을 무조건 전시할 때 가격의 합의 최대는 (dd[i]번째 그림을 전시했을 때의 최대 + i번째 그림의 가치) 즉, (dp[dd[i]] + picture[i].value)라고 할 수 있습니다.
dp[i]는 첫 번째부터 i번째까지의 그림만을 고려했을 때 i번째 그림을 전시할 때의 최대값 혹은 i번째 그림을 전시하지 않을 때의 최대값 중 하나가 됩니다.
전체 코드
1 |
|