贪心思想

总结:玄学。

排序贪心

两种题型:

  • 构造序列,最小化某个式子的值
    • 感性地贪心取。
    • 例如 \(a_i<a_{i+1}\)\(b_i\) 是一个排列,最小化 \(\sum a_ib_i\)
      • \(b_i=n-i+1\)
  • 重排序列,最小化某个式子的值
    • 整理原式,抵消贡献,再贪心。
      • 阿狸和桃子的游戏,[THUPC2023] 大富翁
    • 交换法,记 \(\text{cmp}(i,j)\) 为考虑 \(i\)\(j\) 前面和后面哪个更优。
      • 皇后游戏
      • [USACO23FEB] Fertilizing Pastures G,此时只需要考虑 \(i,j\) 两者之间的贡献
    • 通过人类智慧满足 Strict Weak Ordering。
      • 皇后游戏

排序法则 Strict Weak Ordering

定义 \(x=y\) 成立(incomparable)当且仅当 \(x<y\)\(y<x\) 均不成立。

  1. 对于 \(x\in S\),不存在 \(x<x\)(非自反性,基本条件)
  2. 对于 \(x,y\in S\)\(x<y\),不存在 \(y<x\)(非对称性,基本条件)
  3. 对于 \(x,y,z\in S\)\(x<y,y<z\),有 \(x<z\)(传递性)
  4. 对于 \(x,y,z\in S\)\(x=y,y=z\) 那么 \(x=z\)(不可比性的传递性)

事实上可以由 \(1\)\(3\) 推出 \(2\)

\(1,2\) 是运算符的基本条件,额外满足 \(3\) 即可排序,使用 std:sort 还需满足 \(4\)。排序时需要注意是否稳定。

扩展贪心 / 前 \(\bm k\) 大问题

构造方案使得所有状态形成一棵树,父节点比儿子节点优先级更高,且每个结点度数 \(O(1)\) 级别。此时即可按堆扩展。

这种往往使用可持久化数据结构维护。

这种前 \(k\) 大问题,要么贪心,要么二分。

P2048 [NOI2010] 超级钢琴 / P5283 [十二省联考 2019] 异或粽子 / 前 \(\bm k\) 大区间和

维护左端点,找到最大值所在的右端点。从堆中取出最优值,将最大值所在的右端点两边扩展入堆,或者直接求 \(k\) 小值。

\(\bm k\) 短路

维护非最短路树上的边,加边扩展。

注意 简单路径 只能二分做。

P6646 [CCO2020] Shopping Plans

反悔贪心

模拟费用流。

P1792 [国家集训队] 种树

CF865D Buy Low Sell High

posted @ 2023-07-12 08:24  Network_Error  阅读(12)  评论(0)    收藏  举报