算法第一章·贪心

本章我们来讲述一下何为“贪心思想”以及贪心算法的应用

贪心思想


贪心,顾名思义就是“有一颗贪婪的心,总是想要获得最大的利益”,后面我们还会讲到DP(动态规划)也是关于最优解的。贪心思想遵循“局部最优解即全局最优解”的思想,说明白一点就是当前状态下选择最优解,就会造就整个事件都是最优解

贪心实现


  依照我个人的想法来看,贪心就是一个单纯的结构体排序,如下列代码(这个模板是可以套的):

#include<bits/stdc++.h>
using namespace std;
struct commodity{
    int score,value;
}bin[10010];
bool cmp(commodity a,commodity b)
{
    return a.value>b.value;
}
int n,m,num,ans;
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        cin>>bin[i].score>>bin[i].value;
    }
    sort(bin,bin+n,cmp);
    for(int i=0;i<n;i++)
    {
        if(num>m) break;
        num+=bin[i].score,ans+=bin[i].value;
    }
    cout<<ans;
    return 0;
} 

  现在可以给出一个场景,假设小明出去买菜,遇到了n个卖菜的摊贩,小明希望花最少的钱去购买更多的菜(购买所需钱数不得超过m),试求最小花费金额是多少?

输入说明:第一行输入两个正整数n,m

接下来n行输入,分别表示菜摊贩的报价

输出说明:输出在金额不超过m情况下的菜数量

样例输入:
5 3
1 3
2 8
4 13
1 5
2 6
样例输出:13

同样的,我可以将上述场景换为商场、书店、甚至是找钱最值问题都有可能,思路相同。只需按照上面的模板按照需求加以修改即可

好的,那么本章到此就结束了,喜欢的可以给作者一个赞或关注哦!!!

你的赞是我更新的动力!!!

 

 

posted @ 2024-05-19 12:25  Jared-Aya  阅读(12)  评论(0)    收藏  举报