문제 링크
- http://icpc.me/12766
문제 출처
- 2016 ACM-ICPC World Final B번
사용 알고리즘
- DnC Opt
시간복잡도
- $O(SB log B)$
풀이
$i$번 정점이 크기가 $K_i$인 그룹에 속해있다고 하면, $i$번 정점이 전체 비용에 $(K_i - 1)(dist(i, B+1)+dist(B+1, i))$ 만큼 영향을 줍니다.
위 식을 보면, $i$번 정점이 비용에 영향을 주는 양은 그룹의 크기에만 영향을 받는다는 것을 알 수 있습니다.
만약 $S$개의 그룹의 크기가 모두 정해졌다면, $val(i) = dist(i, B+1)+dist(B+1, i)$가 작은 정점이 큰 그룹에 들어가고, $val(i))$값이 큰 정점이 작은 그룹에 들어가는 것이 최적입니다. 그러므로 $val(i)$값을 기준으로 정렬을 하고, 연속한 정점끼리 그룹을 묶어도 정답을 찾을 수 있습니다.
$D(g, i)$를 $val(~)$ 값이 작은 $i$개의 정점을 $g$개의 그룹으로 묶은 최소 비용이라고 정의하면, $D(g, i) = min_{k < i}(D(g-1, k)+(i-k-1)(\space val(k+1)+val(k+2)+…+val(i)) \space)$로 상태 전이에 대한 식을 새울 수 있습니다.
$O(SB^2)$ DP처럼 보이지만, $C(i, k) = (i-k-1)(val(k+1)+val(k+2)+…+val(i))$가 사각 부등식을 만족하므로 DnC Opt를 사용해 $O(SB log B)$ 복잡도로 풀 수 있습니다.
전체 코드
1 |
|