문제 링크
- http://icpc.me/2647
문제 출처
- 1999 전국 본선 고등부1
사용 알고리즘
- DP
시간복잡도
- O(N3)
풀이
범위 최대 100이고, 쭉쭉 짝을 짓는 다는 것에서 구간DP 느낌이 왔습니다.
val[i][j] = [i, j] 구간에서의 정답, h[i][j] = [i, j] 구간에서의 최대 높이라고 정의합시다.
dp[i][j] = {val[i][j], h[i][j]}라고 정의합시다.
idx[i][j] = [i, j] 구간에서 i와 매칭된 점의 번호라고 정의합시다.
최솟값은 평범한 구간DP문제처럼 쉽게 구할 수 있습니다.
정답을 역추적하는 과정을 봅시다.
- 우리는 이미 [i, j]에서 i번 점이 어떤 점과 매칭되는지 (k = idx[i][j])에 저장했습니다.
- i와 k는 이미 매칭이 되었습니다.
- 매칭되는 구간은 겹치지 않으니까 [i+1, k-1], [k+1, j] 구간을 각각 따로 봐주면 됩니다.
자세한 구현은 코드를 참고하시면 됩니다.
전체 코드
1 |
|