题意
一排 n n n 个村庄,试规划 K K K 个雕像的位置(不一定在村庄里),以最小化每个村庄到最近雕像的距离之和。
对所有数据, K ≤ n ≤ 3 × 1 0 5 , 0 = a 1 < a 2 < ⋯ < a n ≤ 1 0 9 K\le n\le 3\times 10^5,\,0=a_1<a_2<\cdots<a_n\le 10^9 K≤n≤3×105,0=a1<a2<⋯<an≤109.
题解
首先如果只能建一个的话就建在最中间(初一数学知识),答案用前缀和可
O
(
1
)
O(1)
O(1)求。
直接DP是:
f
[
i
]
[
j
]
f[i][j]
f[i][j]表示前
i
i
i个分为
j
j
j段(建
j
j
j个雕像),显然具有单调性 (并不会证) ,用单调队列二分优化即可做到
O
(
n
2
)
O(n^{2})
O(n2)。
瓶颈在于状态数,看似不能优化,必须去掉雕像个数的限制。这时考虑wqs
二分(适用于DP某一维状态对应的最值是凸函数):首先
f
[
n
]
[
i
]
f[n][i]
f[n][i]关于
i
i
i是一个下凸壳(感性认知),然后二分斜率去找在凸壳上截到的点(把每个雕像加上斜率的附加代价,DP时直接不限制雕像个数算最小值),直到截到k点,即可算出DP之后再把附加代价减掉。