【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} \]

代码。

posted @ 2023-03-08 19:53  hcywoi  阅读(41)  评论(0)    收藏  举报

Loading