固定 c,y,可以发现 f(c,x,y) 关于 x 是下凸的。在 R 上考虑,那么最小值一定是在某个 x=ciai 处取到。因此改为在 Z 上考虑,那么最小值一定是在某个 x=⌊ciai⌋,⌈ciai⌉ 处取到。
现在不固定 c,y,通过整除分块可以得出可能的 x 只有 O(nV) 种。对于 y 也是类似的。
我们枚举 x,y 中较大的一个。不妨设 x≥y。
固定 y,此时每个 ci 都是独立的。在 R 上考虑,那么 ∣ai−cix∣+∣bi−ciy∣ 的最小值一定在 ci=xai 处取到。因此改为在 Z 上考虑,那么最小值一定是在某个 ci=⌊xai⌋,⌈xai⌉ 处取到。
现在不固定 y,一种暴力的方法是直接 O(2n) 地枚举每个 ci 的取值,并计算 f(c,x,y) 的最小值。这可以在 O(n) 或 O(nlogn) 内解决。总时间复杂度为 O(n22nV) 或 O(n2logn2nV)。
但我们也可以对于每个 i,求出 y 变化的过程中 ∣ai−cix∣+∣bi−ciy∣ 的取值情况。根据之前对 ci 的分析可以得到这个函数是关于 y 的 O(1) 段分段一次函数。只需要将所有函数都叠加起来即可求出 f(c,x,y) 的最小值。这可以在 O(n) 或 O(nlogn) 内解决。总时间复杂度为 O(n2V) 或 O(n2lognV)。常数较大。