【CF1787C 题解】
【题意】
-
给定一个序列 \(\{a_n\}\)。
-
对于 \(\forall i(2\le i\le n-1)\) 求出数对 \((x_i, y_i)\) 满足 \(x_i+y_i=a_i, (x_i-s)(y_i-s)\ge 0\)。
-
求 \(a_1\times x_2 + y_2\times x_3 +\cdots + y_{n-1}\times a_n\) 的最小值。
Solution
满足 \((x_i-s)(y_i-s)\ge 0\),即满足 \(a_i\le s, b_i\le s\) 或者 \(a_i\ge s, b_i\ge s\)。
我们令 \(\min_i\) 表示 \(\min\{x_i, y_i\}\) 的最小值。
再令 \(\max_i\) 表示 \(\max\{x_i, y_i\}\) 的最大值。
则 \(x_i\) 和 \(y_i\) 一定为 \(x_i\to\min_i, y_i\to\max_i\) 或者 \(x_i\to\max_i, y_i\to\min_i\)。
【证明】:
先得出 \((x_i, y_i)\) 的贡献,\(y_{i-1}\times x_i+y_i\times x_{i+1}\)。
如果 \(y_{i-1}<x_{i+1}\) 那么必然是 \(x_i\) 尽可能大,反之亦然。
综上,我们可以 DP,令 \(f_{i, 0/1}\) 表示到了第 \(i\) 个位置,\(x_{i}\) 的值为 \(\min_{i}/\max_{i}\) 的最小值。
状态转移:
\[\begin{cases}
f_{i, 0}=\min\{f_{i-1, 0}+\max_{i-1}\cdot\min_i, f_{i-1, 1}+\min_{i-1}\cdot\min_i\}\\
f_{i, 1}=\min\{f_{i-1, 0}+\max_{i-1}\cdot\max_i, f_{i-1, 1}+\min_{i-1}\cdot\max_i\}
\end{cases}
\]

浙公网安备 33010602011771号