2018. 7. 24. 17:57, 알고리즘/BOJ
https://www.acmicpc.net/problem/13263
D[i]를 i번 전기톱을 사용할 수 있기 위해 필요한 충전 비용의 최솟값이라고 하면, b_n = 0이므로 N번 전기톱만 사용할 수 있게 되면 다른 모든 나무를 제거할 수 있고, 즉 우리는 D[N]이 정답임을 알 수 있습니다.
D_k = (j = 1 to k-1) min(a_k*b_j + D_j)이라는 식을 얻을 수 있고, 이를 O(N^2)으로 해결하는 대신 Convex Hull Trick을 이용해 O(N)에 해결할 수 있습니다. 맨 처음에는 실수연산을 회피하려 했으나 long long 범위를 초과해 어쩔 수 없이 double을 사용했습니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 14180번: 배열의 특징 (0) | 2018.07.25 |
---|---|
[BOJ] 4008번: 특공대 (0) | 2018.07.25 |
[BOJ] 14240번: 부분 수열의 점수 (0) | 2018.07.24 |
[BOJ] 13260번: 문자열 자르기 (0) | 2018.07.23 |
[BOJ] 13974번: 파일 합치기 2 (0) | 2018.07.19 |
10254번: Highway (0) | 2018.07.19 |
Comments