码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 954E Water Taps

时间:2018-03-22 23:49:02      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:遇到   线性   解法   ORC   思路   blog   不可   规划   完全   

题目大意

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

给定常数 $T$($1\le T\in\mathbb Z\le 10^6$),求解下述最优化问题
\begin{align}
\max \sum_{1\le i\le n} x_i\quad \mathrm{s.t.} \label{sum} \\
\frac{\sum_{1\le i\le n}x_it_i}{\sum_{1\le i\le n}x_i} = T \label{C:1}
\end{align}
若无解则输出 0 。

解法

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

首先将 \eqref{C:1} 化为
\begin{equation}
\sum_{1\le i\le 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$ 的正负性分成两组分别考虑,二者是“无关”的。

具体而言,设
\begin{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 0\le S \le S_{\mathrm{min}}$,$\exists x_1, x2, \dots, x_i, \dots, x_n$ 满足 \eqref{C:0} 且满足
\begin{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$ 改怎么做呢?

Codeforces 954E Water Taps

标签:遇到   线性   解法   ORC   思路   blog   不可   规划   完全   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!