문제 링크
- http://icpc.me/14869
문제 출처
- 2017 KOI 고등부 3번
사용 알고리즘
- DP
- Sliding Window
시간복잡도
- $O(NM)$
풀이
$DP(i, j)$를 i번째 강좌까지 수강했고, 마지막으로 수강한 학원이 j이면서 학원을 옮기려는 할 때의 최소 비용으로 정의를 하고 문제를 풉시다.
$C(a, b)$를 a학원의 첫 번째 강좌부터 b번째 강좌까지 수강한 비용이라고 정의하면, $DP(i, j) = min(DP(u, v) + T + C(j, i) - C(j, u))$입니다. (단, $S ≤ i-u ≤ E, v ≠ j, v ≠ B[j]$)
위 점화식에서 u, v와 관련된 항과 관련되지 않은 항으로 나누어서 보면, 모든 v에 대해 $DP(u, v) - C(j, u)$의 최솟값을 구해서 $T + C(j, i)$를 더해주면 됩니다.
v의 조건이 $v ≠ j, v ≠ B[j]$ 총 2가지이므로, $DP(u, v) $의 가장 작은 3개만 구해놓으면 그중 하나는 무조건 정답이 됩니다.
또한 $[i-E, i-S]$구간은 i가 증가함에 따라 항상 오른쪽으로 이동하므로 N개의 deque를 만들어서 각 u에 대해 $DP(u, v)$ 의 가장 작은 3개를 deque를 이용해 sliding window 느낌으로 관리하면 된다는 것을 알 수 있습니다.
$O(NM)$에 정답을 구할 수 있습니다.
전체 코드
1 |
|