快捷键

切换暗色模式 CtrlD
搜索 CtrlK
关闭弹窗 Esc
返回顶部 Ctrl
快捷键面板 Ctrl/
C++信息学奥赛打字闯关
首页 闯关训练 段位系统 题库中心
技术博客 新闻资讯
排行榜 信奥社区 成就殿堂 在线留言 AI助手
📑 文章目录

贪心算法全解:从活动选择到拟阵理论的竞赛实战

❤️ 930 点赞
💬 0 评论
👁️ 31215 阅读
🔄 更新于 2026-09-11 05:12

贪心算法是竞赛中最常用的算法思想之一,看似简单,实则对思维要求很高。

一、贪心算法核心思想
每一步选择当前看起来最优的方案,期望最终得到全局最优解。

贪心成立的条件(之一):

  • 问题具有最优子结构

  • 贪心选择性质:局部最优能推出全局最优


二、经典贪心问题
  1. 活动选择问题:按结束时间排序

  2. 合并果子(Huffman 编码):每次选最小的两个合并

  3. 区间覆盖:按左端点排序,选择能覆盖最远的区间

  4. 国王游戏:按 a*b 排序

  5. 田忌赛马:双指针贪心


三、贪心证明方法
  • 反证法:假设贪心不是最优,推出矛盾

  • 归纳法

  • 交换论证:从最优解出发,通过有限次交换变成贪心解

  • 拟阵理论(Matroid):贪心在拟阵上总是最优的


四、贪心 + 数据结构
很多贪心问题需要借助数据结构实现高效操作:
  • 贪心 + 优先队列(如合并果子、任务调度)

  • 贪心 + 线段树(如区间调度加强版)

  • 贪心 + 并查集(如删数问题)


五、贪心的陷阱
  • 不是所有问题都能贪心

  • 常见的假贪心例子:0-1 背包(不能贪心!)、非拟阵的集合选择

  • 判断方法:尝试找反例,如果找不到,可以尝试证明


六、拟阵简介
拟阵是贪心算法的数学基础:
  • 判断一个集合系统是否是拟阵

  • 在拟阵上,贪心算法总是最优的

  • Kruskal 求最小生成树本质上就是在图形拟阵上贪心


推荐练习
  • 洛谷 P1223 排队接水(基础)

  • 洛谷 P1090 合并果子

  • 洛谷 P1080 国王游戏

  • 洛谷 P2672 推销员(贪心 + 数据结构)

💬 评论 (0)

暂无评论,快来抢沙发吧~ 🛋️

在线

给管理员留言

每条留言老师都会认真阅读并回复

📚 课程咨询 🔧 技术求助 💡 建议反馈 🤝 合作联系

留言发送成功!

您的留言已送达管理员后台

追踪码(请保存以便查询回复)
------