前言
贪心贪心,顾名思义,就是说你要很贪
(当然你可能会被抓)
不同于 动态规划 的目光长远,贪心 往往“鼠目寸光”,只注重眼前的利益
而这也是贪心的定义:
在当前情况下寻找 局部 最优解
所以当你确定一道题目是贪心时,不要想太多,每次取最优即可
纵使后面可能会有更好的情况,那也不关咱们的事
(谁让咱们贪呢)
当然有一些贪心题看起来很像dp,千万别搞混(比如例题第一题)
例题
Luogu P2095 营养膳食
注意:这题不是dp,这题不是dp,这题不是dp!
(我还信誓旦旦地说这是背包来着)
第一遍看我就只想到了 dp ,写了 10min 之后发现 dp 完全无法实现
所以这题是贪心无疑
那么我们怎么贪呢?
大家应该还记得贪心的定义,所以我们每次只要吃脂肪尽可能多的就可以了
做法:
1. 读入每种食物最多吃多少份
2. 读入食物的脂肪和种类
3. 按脂肪排序(核心部分 非常重要)
4. 排序部分我们从大到小排,所以从第一份开始判断(i from 1 to m)
5. 先判断还能不能吃这一种
6. 再判断有没有越界( now≤n )
7. 符合条件直接加上即可
写完之后我们会发现,得出的就是最优解,因为脂肪最多的那些都被我们吃掉了
代码仅供参考:
#include<cstdio>
#include<algorithm>//使用sort函数
using namespace std;
int n,m,k,Max_Eat[105],ans;
struct node//创建结构体存信息
{
<