贪心总结

孤者浪人 提交于 2020-03-17 07:43:03

这个周学习了贪心算法,下面总结一下这周贪心的学习。
什么是贪心算法
贪心算法指的是解最优化问题的一种特殊方法,解决过程中总是做出当下最好的选择,因为具有最优子结构的特点,局部最优解可以得到全局最优解;这种贪心算法是动态规划的一种特例。能用贪心解决的问题,也可以用动态规划解决。贪心算法,就是找到找到一种方法找到解决一种事情的最优办法。
下面通过一个例题,整理一下贪心算法的运用。

  1. 分糖果
    题目:已知一些孩子和一些糖果,每个孩子有需求因子g,每个糖果有大小s,当某个糖果的大小s>=某个孩子的需求因子g时,代表该糖果可以满足该孩子,求使用这些糖果,最多能满足多少孩子(注意,某个孩子最多只能用1个糖果满足)
    #include
    #include
    class Solution
    {
    public:
    Solution(){}
    ~Solution(){}
    int findContentChildren(std::vector& g, std::vector& s)
    {
    std::sort(g.begin(), g.end());
    std::sort(s.begin(), s. end());
    unsigned int child = 0;
    unsigned int cookie = 0;
    while (child<g.size() && cookie<s.size())
    {
    if (g[child] <= s[cookie])
    {
    child++;
    }
    cookie++;
    }
    return child;
    }
    };
    int main()
    {
    Solution solve;
    std::vector g;
    std::vector s;
    g.push_back(5);
    g.push_back(10);
    g.push_back(2);
    g.push_back(9);
    g.push_back(15);
    g.push_back(9);
    s.push_back(6);
    s.push_back(1);
    s.push_back(20);
    s.push_back(3);
    s.push_back(8);
    printf("%d\n",solve.findContentChildren(g,s));
    return 0;
    }
    贪心思想:
    因为一个孩子如果可以用更小的糖果满足,则没必要用更大的糖果满足。更大的糖果应该满足需求因子更大的孩子,这样就能解决问题。
    按照从小到大的顺序使用各糖果尝试是否可满足某个孩子,每个糖果只尝试1次,若尝试成功,则换下一个孩子尝试;一直到发现没有更多孩子或没有更多糖果,循环结束。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!