GESP5级C++考试语法知识(十三、贪心算法(一))

🌟第一课:《贪心王国大冒险》


🏰 一、故事开场:贪心王国

1、在遥远的地方,有一个王国叫做------贪心王国

这里的居民有一个特别的习惯:

👉 每一步都选"眼前最好的"!


2、小勇士问国王:

"这样真的好吗?不会选错吗?"


3、国王笑着说:

"有些问题,这样做刚刚好!"


4、今天,汉克老师就与小勇士,一起探索------

🌟 什么是贪心算法!


🧠 二、什么是贪心算法?

1、🌟一句话理解

👉 贪心 = 每一步都选当前最优!


2、🧩 举个生活例子

你在选零食:

  • 有巧克力🍫(最贵)

  • 有糖果🍬

  • 有饼干🍪

👉 每次都拿最贵的

👉 这就是"贪心"!


3、⚠️ 但注意

👉 有时候这样是对的

👉 有时候会翻车(后面讲)



🏴‍☠️ 三、第一关:海盗船装货(超经典!)


1、📖 故事背景

海盗抢到一艘大商船!

但问题来了:

👉 海盗船很小,只能装 500体积 的货物

👉 有很多货物,每个体积不同

👉 所有货物价值一样!


2、🎯 目标

👉 装最多件货物!


3、🧠 思考引导

(1)汉克老师问:

❓ 想装最多件 → 应该选大的还是小的?


(2)同学们思考后说:

👉 选小的!


4、💡 贪心策略诞生!

👉 每次选 体积最小的货物


5、✨ 为什么?

  • 小的占空间少

  • 能装更多件

  • 更"划算"!


6、🪄 解题步骤

✅ 第一步:排序

把货物按体积从小到大排


✅ 第二步:开始装

从最小的开始装


✅ 第三步:装到放不下为止


7、💻 参考代码

复制代码
#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;
}

8、🎯 小结一句话

👉 想装最多 → 永远选最小体积的!



🚰 四、第二关:排队接水


1、📖 故事背景

村子里只有一个水龙头 🚰

有 n 个人排队接水,每个人用时不同:

👉 有人1秒

👉 有人100秒

问题来了:

👉 怎么排队,大家等的时间最少?


2、🎯 目标

👉 平均等待时间最小!


3、🧠 思考引导

汉克老师问:

❓ 是先让接水慢的人,先接水好,还是快的人先接水好呢?


4、🧪 举例对比

假设两个人:

  • A:1秒

  • B:10秒


5、🚫 排法1(慢的先)

B → A

等待:

  • B等0秒

  • A等10秒

👉 总等待 = 10


✅ 排法2(快的先)

A → B

等待:

  • A等0秒

  • B等1秒

👉 总等待 = 1


6、🎉 结论!

👉 让用时短的人先来!


7、💡 贪心策略

👉 按时间从小到大排序!


8、🪄 解题步骤

✅ 第一步:排序(从小到大)


✅ 第二步:依次排队


✅ 第三步:计算等待时间


9、💻 参考代码

复制代码
#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;
}

10、🎯 小结一句话

👉 想让最后等待时间最少 → 就要让让接水快的人,先接水!



🧠 五、第一课核心总结


1、🌟 贪心三步法

✅ 第一步:判断能不能用贪心

✅ 第二步:找到贪心策略

✅ 第三步:验证是否正确


2、🌟 贪心本质

👉 当下做最优判断!


3、🌟 题目贪心策略总结:

问题 贪心策略
海盗船 选最小
排队接水 选接水最短时间


🎮 六、课堂互动小挑战

🎯 挑战1(口算版)

货物:10 20 30 100 200

容量:100

👉 海盗船能装几件?


🎯 挑战2(思考题)

如果每人接水时间为:

5 3 8 1

👉 时间最短,安排的正确顺序是?



🎉结束语

同学们学会了一种魔法:

"每一步选最好的!"


汉克老师说:

"想成为真正的高手,你必须学会------什么时候可以使用贪心,还要知道正确的贪心规律才行!"

👉 明天第二课我们继续去冒险!



相关推荐
梦想画家2 小时前
Apache AGE实战指南:从Cypher语法到核心图算法
算法·cypher·apache age
刀法如飞3 小时前
Go数组去重的20种实现方式,AI时代解决问题的不同思路
后端·算法·go
汉克老师3 小时前
GESP5级C++考试语法知识(贪心算法(一)课堂例题精讲)
c++·贪心算法·gesp5级·gesp五级·贪心规律
旖-旎3 小时前
深搜练习(N皇后)(10)
c++·算法·深度优先·力扣
Controller-Inversion4 小时前
322. 零钱兑换
算法
头发够用的程序员4 小时前
C++和Python面试经典算法汇总(一)
开发语言·c++·python·算法·容器·面试
淡海水4 小时前
【AI模型】模型量化技术详解
人工智能·算法·机器学习
炸膛坦客4 小时前
嵌入式 - 数据结构与算法:(1-1)数据结构 - 顺序表(Sequential List)
数据结构·算法·嵌入式
水龙吟啸4 小时前
数据结构与算法随机复习–Day1
数据结构·c++·算法