贪心是什么

8 分钟

贪心就是每一步都抓当前看起来最划算的选择,选完不反悔、不回头。比如找零钱想用最少的硬币,就每次都先拿面额最大的。贪心代码往往很短,但有个硬要求:你得能说清"为什么这样一步步选下去,最后一定最优"。

#include <iostream>
using namespace std;
int main() {
    int coins[3] = {100, 10, 1};            // 从大到小
    int money = 236, cnt = 0;
    for (int c : coins)
        while (money >= c) { money -= c; cnt++; }
    cout << "最少用 " << cnt << " 枚硬币";  // 2+3+6 = 11 枚
}

对 100/10/1 这种面额,贪心确实最优。但贪心不是万能的——能不能用取决于问题的性质,不能想当然。下一节就给你看一个贪心翻车的例子。

小纸条

拿硬币凑钱时,你会怎么拿?

登录 后可看答案

贪心是什么 · C++ 入门 · op599 课程