建学校问题 / 学校选址 II
题目链接:SSL 2887 / luogu P2803
题目大意
有 n 个城市链状排着,编号相邻的连接,然后有边权和点权。
你可以选 k 个点,然后对于每个点,它会找距离它最近的你选的点,然后它的费用就是它的点权乘到你选的点的距离。
然后你要让总费用最小。
思路
看到题你考虑 DP。
设 f i , j , k f_{i,j,k} fi,j,k 为前 i i i 个城市,选 j j j 个地方建学校,最后一个地方建在 k k k 的最小费用。
那你考虑怎么转移,你会想到,对于两个学校,中间如果没有别的学校,它就会有一个分界点。
分界点左边的城市到去左边的学校,右边的城市去右边的学校。
那分界点到两个城市的距离肯定要尽可能近,就可以通过二分来搞,找第一个左边大于右边的或第一个右边大于左边的。
这个我们可以预处理出来。
然后你就重新考虑怎么转移。
那你考虑枚举了前面的三个,然后你就考虑找前面的倒数第二个学校,然后找到它所统辖的右边界(二分的那个)。然后对于最后一个学校 k k k,就它会统辖二分的后面一个位置到 i i i。
那至于后面的统辖费用要怎么算呢?可以分成它统辖它前面的和它统辖它后面的。
那这个我们也可以预处理出来。
然后我们就可以真正的列出转移方程式了:
f j , i , k = min l = 1 k − 1 { f e f l , k , i − 1 , l + l e f k , e f l , k + 1 + r i g k , j } f_{j,i,k}=\min\limits_{l=1}^{k-1}\{f_{ef_{l,k},i-1,l}+lef_{k,ef_{l,k}+1}+rig_{k,j}\} fj,i,k=l=1min