2018. 1. 7. 14:30, 알고리즘/BOJ
https://www.acmicpc.net/problem/2515
우선 그림을 높이 순으로 정렬합니다. 그리고 D[i]를 pic[0~i]를 전시할 때 최댓값(단 i번째 그림은 반드시 보여짐)이라고 잡는다면, D[i]는 pic[i]-S 이하의 높이를 가진 그림 pic[0], pic[1], ..., pic[k]에 대해 D[i] = max(D[0], D[1], ... , D[k]) + pic[i]의 높이 입니다.
max(D[0], D[1], ... , D[k])를 각 i에 대해 매번 구하게 될 경우 O(N^2)이지만, max 값을 누적시켜서 계속 가져가면 O(N)으로 해결이 가능합니다. 그러므로 시간복잡도는 최초의 정렬때 O(NlgN), 이후 DP에서 O(N)이 되어 O(NlgN)이 됩니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 1007번: Vector Matching (0) | 2018.01.07 |
---|---|
[BOJ] 1006번: 습격자 초라기 (0) | 2018.01.07 |
[BOJ] 2261번: 가장 가까운 두 점 (2) | 2018.01.07 |
[BOJ] 2306번: 유전자 (0) | 2018.01.07 |
[BOJ] 2300번: 기지국 (0) | 2018.01.07 |
[BOJ] 2250번: 트리의 높이와 너비 (2) | 2018.01.07 |
Comments