Codeforces 954E Water Taps

题目大意

有 $n$($1le nle 200000$)个变量 $x_1, x_2, dots, x_n$,满足
egin{equation}
0le x_i le a_i label{C:0}
end{equation}
其中 $1le a_i le 10^6$,$a_iinmathbb Z$ 。

给定常数 $T$($1le Tinmathbb Zle 10^6$)以及常数 $t_1, t_2, dots, t_n$($1le t_iinmathbb Zle 10^6$),求解下述最优化问题
egin{align}
max sum_{1le ile n} x_iquad mathrm{s.t.} label{sum} \
frac{sum_{1le ile n}x_it_i}{sum_{1le ile n}x_i} = T label{C:1}
end{align}
若无解则输出 0 。

解法

比赛时我毫无思路,想不起来从前遇没遇到过类似的题目。

首先将 eqref{C:1} 化为
egin{equation}
sum_{1le ile n} (t_i - T) x_i = 0 label{C:2}
end{equation}
将约束条件写成这种形式,保证了新问题与原问题完全等价。(换言之,包含了无解—即 eqref{C:1} 无法满足—的情况)

下面的讨论都基于 eqref{C:2} 式。

这个问题不必【也不可能?($n$ 太大)】用线性规划求解。
key observation 是

eqref{C:2} 中的各项可以按系数 $t_i -T$ 的正负性分成两组分别考虑,二者是“无关”的。

具体而言,设
egin{align}
S_+&=sum_{t_i-T>0}(t_i-T) a_i \
S_-&= sum_{t_i - T < 0}(T-t_i) a_i \
S_{mathrm{min}} &= min{S_+\,, S_-}
end{align}
我们有

$forall 0le S le S_{mathrm{min}}$,$exists x_1, x_2, dots, x_i, dots, x_n$ 满足 eqref{C:0} 且满足
egin{align*}
sum_{t_i -T > 0} (t_i - T) x_i = S \
sum_{t_i - T<0} (T-t_i) x_i = S
end{align*}

不难看出,取 $S = S_{mathrm{min}}$ 可使 eqref{sum} 最大。
这题实际上是一道贪心问题。

推广

把 eqref{C:1} 的分子分母中的 $x_i$ 都换成 $x_i^2$ 也是一样的做法。
但是若只把分母或分子中的 $x_i$ 换成 $x_i^2$ 改怎么做呢?

原文地址:https://www.cnblogs.com/Patt/p/8627212.html