当前位置: 首页 > news >正文

GESP5级C++考试语法知识(贪心算法(一)课堂例题精讲)


🎮《贪心王国·第一课闯关挑战》


🏴‍☠️ 第一类:海盗船系列(选最小)


🎯 第1关(基础入门)

1、题目:

容量 = 10
货物:1 2 3 4 5

👉 最多能装几件?


2、✅ 正确答案

4件(1+2+3+4=10)


3、❗ 常见错误

👉 有学生选:5 + 4 = 9(只装2件)


4、💡 学习重点

👉目标是“数量最多”,不是“体积最大”!



🎯 第2关(顺序陷阱)

1、题目:

容量 = 10
货物:8 1 9 2 7


2、❗ 坑点

👉 数据是乱序的!


3、✅ 正确思路

排序 → 1 2 7 8 9
→ 1+2+7=10 → 3件


4、❗ 常见错误

👉 不排序,直接从前往后选


5、💡 讲解一句话

👉贪心之前,很多题必须排序!



🎯 第3关(边界陷阱)

1、题目:

容量 = 10
货物:2 3 5


2、❗ 坑点

👉 刚好装满


3、❗ 常见错误

👉 写成< 10而不是<= 10


4、💡 讲解重点

👉等于也可以装!



🎯 第4关(“贪大”误区)

1、题目:

容量 = 10
货物:6 4 3 3


2、❗ 常见错误思路

👉 选最大的:6 → 剩4 → 再选4 → 2件


3、✅ 正确答案

3件(3+3+4=10)


4、💡 核心讲解

👉这题专门打脸“选最大”的错误贪心!



🎯 第5关(装不满陷阱)

1、题目:

容量 = 10
货物:6 6 6


2、✅ 正确答案

1件


3、❗ 常见错误

👉 有学生会觉得“装不满就不选”


4、💡 讲解重点

👉目标是尽量多,不是必须装满!


海盗船参考程序:

#include <iostream> #include <algorithm> using namespace std; int main() { int n, a[25]; cin >> n; for(int i = 0; i < n; i++) { cin >> a[i]; } // 从小到大排序 sort(a, a + n); int sum = 0; // 当前体积 int cnt = 0; // 装了多少件 for(int i = 0; i < n; i++) { if(sum + a[i] <= 500) { sum += a[i]; cnt++; } else { break; } } cout << cnt; }


🚰 第二类:排队接水(选最短时间)


🎯 第6关(基础)

1、题目:

3个人:3 1 2

👉 最优顺序?


2、✅ 正确答案

1 2 3


3、❗ 常见错误

👉 按输入顺序不变


4、💡 讲解重点

👉必须排序!



🎯 第7关(直觉误导)

1、题目:

时间:10 1 1


2、❗ 常见错误

👉 有学生会让“最长的先”(误以为公平)


3、✅ 正确答案

1 1 10


4、💡 讲解重点

👉贪心不是“公平”,而是“总时间最优”



🎯 第8关(重复值陷阱)

1、题目:

时间:5 5 5 5


2、❗ 坑点

👉 全一样!


3、✅ 正确结论

👉 顺序无所谓


4、💡 讲解重点

👉当数据相同时,贪心策略不唯一



🎯 第9关(计算陷阱)

1、题目:

时间:1 2 3

👉 平均等待时间?


2、❗ 常见错误

👉 只算总时间,不算等待


3、✅ 正确计算

顺序:1 2 3

等待:

  • 1 → 0

  • 2 → 1

  • 3 → 1+2=3

总等待 = 4
平均 = 4 / 3


4、💡 讲解重点

👉等待时间是“前面所有人的和”!



🎯 第10关(综合大坑)

1、题目:

时间:8 3 5 1


2、❗ 常见错误流程

  • 不排序

  • 或排序后不会算等待


3、✅ 正确步骤

排序 → 1 3 5 8

等待:

  • 1 → 0

  • 3 → 1

  • 5 → 1+3=4

  • 8 → 1+3+5=9


4、💡 核心讲解

👉排序 + 累加 = 贪心核心套路


接水问题参考程序:

#include <iostream> #include <algorithm> using namespace std; int main() { int n; cin >> n; int t[1000]; for(int i = 0; i < n; i++) { cin >> t[i]; } sort(t, t + n); // 从小到大 long long wait = 0; long long sum = 0; for(int i = 0; i < n; i++) { sum += wait; wait += t[i]; } double avg = (double)sum / n; cout << avg; }

💣 最重要:学生最容易犯的 6 大错误总结


❌ 错误1:不排序直接贪

👉 最常见!!

💡 对策:
👉先排序,再贪心!


❌ 错误2:搞错“贪什么”

  • 海盗船 → 应该选小 ❗

  • 接水 → 应该选快 ❗

💡 对策:
👉 先问:目标是什么?



❌ 错误3:把“装满”当目标

💡 正解:
👉 是“最多件”,不是“刚好满”



❌ 错误4:边界写错(<=)

💡 对策:
👉 多强调:
👉能等于就必须等于!



❌ 错误5:不会算等待时间

💡 核心一句话:
👉每个人的等待 = 前面所有人的时间



❌ 错误6:以为贪心永远对

(非常关键,给第二课埋伏笔)

💡 引导学生:
👉 “如果规则变了,还对吗?”



http://www.jsqmd.com/news/754215/

相关文章:

  • SciEducator:基于PDSA循环的科学教育内容生成系统
  • 别再只用Aircrack-ng了!用Kali Linux实战蓝牙安全测试(从环境搭建到Crackle工具实战)
  • 用BFS方法求解平分汽油问题
  • 量子辅助PINN求解抛物型偏微分方程的技术解析
  • FastAPI 依赖注入
  • AI模型服务化实战:适配器模式解决模型与应用集成难题
  • Agentspec:用规范契约驱动AI智能体工程化开发
  • 基于扩散模型数据增强的YOLOv10少样本检测:从零开始的完整实战
  • Spring Boot 如何实现 JWT 双令牌机制刷新 access_token?
  • 从沙漠到深海:聊聊那些让地震剖面‘变清晰’的静校正‘黑科技’(以Marmousi模型为例)
  • C语言完美演绎9-18
  • 基于vibe-annotations数据集的视频氛围识别:从数据构建到模型部署
  • AI编码助手集成SEO审计:技能即文档的Next.js开发实践
  • 扩散模型超参数优化与工程实践指南
  • 智能教育系统SciEducator的多模态架构与PDCA优化实践
  • 仅限.NET 9 Preview 7+可用!C# 13内联数组三大不可逆优化特性(附BenchmarkDotNet压测报告)
  • LLM4Cov:基于大语言模型的硬件验证测试平台生成框架
  • 黑屏,事件ID 1001,解决办法
  • 别再手动计数了!用STM32F103的编码器模式读取旋转编码器,附TIM4完整配置代码
  • 免费AI API聚合服务:开发者如何低成本接入Claude等大模型
  • 离散扩散语言模型的扩展规律与实战优化
  • 语义视频生成技术解析与应用实践
  • 从Lytro到工业复眼:光场相机除了‘先拍后对焦’,在工业检测里还能怎么玩?
  • OpenMMReasoner:多模态大模型训练框架解析与应用
  • 【限时解密】C# 13 Roslyn源码级委托优化开关:/optimize+ /refstructdelegate /noalloc-delegate(.NET SDK 8.0.300+专属)
  • 别再只会用默认AppBar了!Flutter 3.x 自定义顶部导航栏的10个实战技巧
  • 避坑指南:Unity集成SteamVR 2.0时,Interactable组件参数详解与常见交互Bug修复
  • 5分钟快速上手Notepad--:跨平台文本编辑器的完整入门指南
  • 功能安全C++开发必踩的5个编译器陷阱,从GCC 12到Clang 17全版本验证,附可嵌入PLC固件的检测脚本
  • 【LangChain】使用 LangChain 快速实现 RAG