Loading

[gym 100861E] Extreme Programming

前言

这个题赛时的想法已经很对了, 主要探讨排序的证明

思路

题意

给定 nnTi,PiT_i, P_i , 要求一个顺序 a1,a2,a3,,aka_1, a_2, a_3, \cdots , a_k , 使得对应的 EP=P1+P2++PkEP = P_1 + P_2 + \ldots + P_k 最大, 相同 EPEP 应当使得 ET=T1P1+(T1+T2)P2++(T1+T2++Tk)PkET = T_1P_1 + (T_1 + T_2)P_2 + \ldots + (T_1 + T_2 + \ldots + T_k)P_k 最小, 输出最优的 aa

不难发现只考虑 \(EP\) 是简单背包
考虑「不同选择方案相同 \(EP\)」时, 怎样才能让 \(ET\) 最小, 修改状态被证明是完蛋的

\(ET\) 进行显而易见的变形可得

\[ET = \sum_{i = 1}^{k} \left(T_i \times \sum_{j = i}^{k} P_i\right) \]

赛时出现的一个小问题

赛时认为不能使用 pair\rm{pair} 存结果, 会像很多题一样丢状态

但是实际上观察状态设计
fi,wf_{i, w} 表示考虑前 ii 个题目, 使用了 ww 的时间时, 最优的 {EP,ET}\{EP, ET\}

对于一个状态, 除了最优的 {EP,ET}\{EP, ET\} , 其他的状态在接下来的更新中一定不优

证明

对于 {EP,ET}\{EP, ET\} , 如果我们遇到一个题目 {Pi,Ti}\{P_i, T_i\} 并且决定选上他之后, 会变成
{EP+Pi,ET+(i=1kTi)Pi+TiPi}\{ EP + P_i, ET + (\sum_{i = 1}^{k} T_i) P_i + T_i P_i \}
不难发现由于 Pi>0,Ti>0P_i > 0, T_i > 0 , {EP,ET}\{EP, ET\} 在当前如果不是最优, 后面一定不会更优


所以现在的问题变成了, 能否确定一组顺序, 使得按照顺序选择的方案满足 \(ET\) 最小

不得不想起之前一道 \(\textrm{div 2 C}\) 的逐步贪心策略
增量法发力, 同上可知, 对于一组 \(\{P_i, T_i\}\) , 其关于 \(ET\) 的增量为 \((\sum_{j = 1}^{k} T_j) P_i + T_i P_i\)
发现权重和 \((\sum_{j = 1}^{k} T_j)\) , 增量法发力失败

用交换相邻元素的方法结合增量法来比较哪种排列更好
假设 \([1,\min\{i, j\})\) 中的 \(T\) 之和为 \(S\) , 那么

  • 如果 \(i\) 在前, \(j\) 在后
    \(\Delta ET = S P_i + T_iP_i + (S + T_i) P_j + T_jP_j\)
  • 如果 \(i\) 在后, \(j\) 在前
    \({\Delta ET}^{\prime} = S P_j + T_jP_j + (S + T_j) P_i + T_iP_i\)
  • 作差

    \[\begin{align*} &\Delta ET - {\Delta ET}^{\prime} \\ =& \left[S P_i + T_iP_i + (S + T_i) P_j + T_jP_j\right] - \left[S P_j + T_jP_j + (S + T_j) P_i + T_iP_i\right] \\ =& S P_i + T_iP_i + S P_j + T_i P_j + T_jP_j - S P_j - T_j P_j - S P_i - T_j P_i - T_iP_i \\ =& T_i P_j - T_j P_i \end{align*}\]

不难发现按照 \(T_i P_j - T_j P_i < 0\) 排序即可

总结

如果满足贪心性质, \(\rm{pair}\) 作为 \(f\) 中的内容是完全可行的

推导贪心策略的常用方法

  • 反证 + 作差
  • 增量法
  • 交换相邻元素法
posted @ 2025-02-13 16:03  Yorg  阅读(11)  评论(0)    收藏  举报