贪心是什么
约 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 这种面额,贪心确实最优。但贪心不是万能的——能不能用取决于问题的性质,不能想当然。下一节就给你看一个贪心翻车的例子。
小纸条
拿硬币凑钱时,你会怎么拿?
登录 后可看答案