7.5 CW 模拟赛 T3. 能量
前言
心态
策略: \(30\)
停滞不超过 \(15\)
数据检验, 关键步记录, 时刻简化
思路
首先考虑排序方法
对于赚钱的部分, 显然按照 \(a\) 排序
对于损失的部分, 考虑记这一部分为 \(a_{1, 2, \cdots, k}, b_{1, 2, \cdots, k}\), 记 \(f_i\) 表示从第 \(i\) 个开始需要的起始资金
不难有
这种问题是很经典的, 考虑交换相邻元素法
考虑 \(\{a_1, b_1\}, \{a_2, b_2\}, f_k\)
那么按照 \(\{a_1, b_1\}, \{a_2, b_2\}, f_k\) 的顺序, \(f_1 = \max \{\max(f_k + a_2 - b_2, a_2) + a_1 - b_1, a_1\}\)
按照 \(\{a_2, b_2\}, \{a_1, b_1\}, f_k\) 的顺序, \(f_1 = \max \{\max(f_k + a_1 - b_1, a_1) + a_2 - b_2, a_2\}\)
进一步拆分
因此我们根据后两项对序列排序即可
现在引入选 \(k\) 个
先对序列排序, 直接引入一维记录已经选了多少个即可
还有一档全是赚钱的, 只需要贪心选择前 \(k\) 个即可
一档部分赚钱部分损失, 损失部分不超过 \(1000\) 个, 拆成两部分选择即可
如何合并?
设 \(g_i\) 表示选择 \(i\) 个赚钱的最小初始能源, \(h_i\) 表示选择 \(i\) 个赚钱的最终增量
那么合并即为 \(ans_k \gets \min\limits_{i + j = k} \{\max (g_i, f_{p, j} - h_i)\}\)
先算 \(g_i \geq f_{p, j} - h_i\) 的情况, 枚举 \(g_i\), 找到满足这个条件的最大 \(j\), 那么 \(ans_{i \sim i + j}\) 都可以更新
再算 \(g_i < f_{p, j} - h_i\) 的情况, 枚举 \(j\), 找到满足这个条件的最大 \(i\), 那么 \(ans_{j \sim i + j}\) 都可以更新
这样就做完了, 打下代码
注意更新用线段树维护两类贡献即可
总结
多个 \(\max\) 嵌套, 考虑把所有可能得到的情况考虑进去取 \(\max\)
确定顺序使得某个值取到最小的问题, 考虑交换相邻元素法
最终可以确定顺序
最后的合并属于一种贡献类问题, 属于特殊的处理方法

浙公网安备 33010602011771号