首页 > 编程语言 > 详细

笔试题总结:贪心算法(或动态规划)

时间:2019-09-11 12:18:52      阅读:80      评论:0      收藏:0      [点我收藏+]

概念:

当一个问题具有最优子结构性质时,可用动态规划算法,有时会有更简单有效的算法,那就是贪心算法,贪心算法是通过一系列的选择来得到问题的解,贪心算法并不从整体最优上加以考虑,所做的选择只是在某种意义上的局部最优解。但对范围相当广的许多问题能产生整体最优解。在一些情况下,即使贪心算法不能得到整体最优解,但其最终结果却是最优解的很好的近似解。

贪心算法的基本要素:

贪心选择性质:所求解的问题的整体最优解可以通过一系列局部最优的选择来,即贪心选择达到。贪心选择所依赖的是以前所做过的选择,而对以后所做的选择没有关系。

最优子结构性质:一个问题的最优解包含其子问题的最优解。

贪心算法与动态规划的区别:

动态规划是通过自底向上的方式解决子问题,贪心算法是通过自顶向下的迭代方式做出贪心选择,求解问题的最优解。两共同点是都具有最优子结构性质。

1.欢聚时代:容量M,电影N部,每部喜爱值不一样,电影大小不一样,求不超过容量最喜欢的值

100 5//容量,5部电影

29 28 19 18 20//电影容量

9   4     3   8 10//每部喜爱值 

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
    int cap,num,tmp;
    map<int, int, greater<int>> love_size;
    cin >> cap>>num;
    cout << cap << ":" << num << endl;
    vector<int> movie, love;
    for (int i = 0; i < num;i++)
    {
        cin >> tmp;
        movie.push_back(tmp);
    }
    for (int i = 0; i < num; i++)
    {
        cin >> tmp;
        love.push_back(tmp);
    }
    for (int i = 0; i < num;i++)
    {
        love_size.insert(make_pair(love[i],movie[i]));
    }
    int love_sum=0;
    int movie_cap = 0;
    for (auto v:love_size)
    {

        movie_cap += v.second;
        love_sum += v.first;
        cout << "select:" << v.first << ":" << v.second  <<":"<<love_sum<<endl;
        if (movie_cap >= cap)
        {
            if (movie_cap> cap) love_sum -= v.first;
            break;
        }

    }
    cout << love_sum << endl;
    system("pause");
}
    

华为:一百块钱需要买100只鸡,公鸡5元一只,母鸡3元一只,小鸡一元三只。请输出所有可能的情况。

5*x+3*y+z/3=100

x+y+z=100

0=<x<=25

0=<y<=33

0=<z/3<=100

#include<iostream.h>
void main()
{
    int x,y,z,count=0;
    cout<<"百钱买百鸡的方案有:"<<endl;
    for(x=0;x<=20;x++)
        for(y=0;y<=33;y++)
            for(z=0;z<=300;z=z+3)
             if(5*x+3*y+z/3==100&&x+y+z==100)
             {
                 ++count;
                 cout<<count<<":"<<x<<","<<y<<","<<z<<endl;
             }
            
}

 

类似的比如百度:

技术分享图片

 

 x+2*y=N;

0<=x<=N

0<=y<=N/2

 

  

笔试题总结:贪心算法(或动态规划)

原文:https://www.cnblogs.com/bwbfight/p/11505264.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!