7.21 暂存
P11608 [PA 2016] 雨后的蘑菇 2 / Grzyby po deszczu 2
注意到不会有两天选择同一块地。
设前 \(i\) 天最多能采 \(f(i)\) 个蘑菇 ,第 \(j\) 天选择的地编号为 \(p_j\),则
\[\begin{align}
f(i) &= \sum\limits_{j = 1}^{i}b_{p_j} + a_{p_j}\times (j - 1)\\ &= \sum\limits_{j = 1}^{i}b_{p_j} + \sum\limits_{j = 1}^{i}a_{p_j}\times (j - 1)
\end{align}
\]
发现需要 \(a_{p_j}\) 单调递增,排序处理。
考虑动态规划,设 \(f(i, j)\) 为只考虑前 \(i\) 块地前 \(i\) 天能采集的最多蘑菇数。显然
\[f(i, j) = \max\{f(i - 1, j), f(i - 1, j - 1) + a_i \times(j - 1) + b_i)\}
\]
这个转移是 \(\mathcal{O}(n^2)\) 的,需要优化。
因为第 \(i + 1\) 天的最优方案一定是比第 \(i\) 天的最优方案多选择一块地,则如果某天的最优方案加上了一块地,那之后都应该选择了这块地。因此,上面的转移存在一个分界 \(k\),满足
\[\begin{cases}
f(i, j) = f(i - 1, j)&j \lt k\\
f(i, j) = f(i - 1, j - 1) + a_i\times(j - 1) + b_i&j\ge k
\end{cases}
\]
存在某种继承关系,考虑用平衡树维护。但不是很好维护。
但是差分很好维护。定义 \(g(i, j) = f(i, j) - f(i, j - 1)\)。
容易得到
\[\begin{cases}
g(i, j) = g(i - 1, j)&j \lt k\\
g(i, k) = a_i \times (j - 1) + b_i\\
g(i, j) = g(i - 1, j -1) + a_i&j \gt k
\end{cases}
\]
这是好用平衡树维护的。
我实在看不懂题解在说什么
第 \(i + 1\) 天的最优方案一定是比第 \(i\) 天的最优方案多选择一块地
假如说是换了 \(k\) 块地,再加一块地,这说明第 \(i\) 天换 \(k\) 块地更优。
浙公网安备 33010602011771号