贪心

329 字
2 分钟
贪心

贪心:排序推公式#

  • 思路
  1. 猜一个排序依据(比如按重量、按 deadline、按权值差等)
  2. 任取相邻两项 i, j 假设顺序错了,写出交换前/后只与这两头有关的代价/收益表达式
  3. 令“交换后更优”得不等式,化简成key(i) < key(j) 或 key(i) > key(j)这个 key 就是 sort 的排序键
  4. 全局按 key 排一遍序即可,Greedy 正确性由“相邻交换不影响其余部分”保证
  • 经典例题
题目相邻交换不等式排序键备注
奶牛玩杂技(W+wi)−sj < (W+wj)−sii+si < wj+sj 即 wi−si < wj−sj按 wi+si 升序排,最小化最大压扁值
排队接水i 在前 j 在后总等待 < j 在前 i 在后总等待ti < tj按时间升序,最小化总等待时间
活动安排结束早的先选end<endj按结束时间升序,最大化场次
  • 模板代码(奶牛玩杂技)
struct Cow { int w, s; };
bool cmp(const Cow& a, const Cow& b) {
return (a.w + a.s) < (b.w + b.s); // 推出来的排序键
}
sort(cows, cows + n, cmp);
  • 注意
  1. 能否只比较相邻两项?
  2. 交换后其余部分代价是否不变
  3. 不等式能否化简成只与单项数据有关的键?
  4. 直接sort一遍得到全局最优

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Profile Image of the Author
HandlerOne
おかえり
公告
本站已整理 138 篇技术笔记,并按 8 条主线排成学习路线(141 站);站内搜索与桌宠对话均已上线。
分类
标签
最新动态
站点统计
文章
138
分类
12
标签
42
总字数
597,044
站点信息
构建平台
腾讯云 · Nginx
博客版本
v6.16.8
文章目录