贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。

贪心算法的局部最优解:在当前子结构中,方案1是最优的解,通过方案1可以得到此子结构的最优化的解,此结构称为最优子结构。由部分最优推到全体最优。

ps:贪心算法得到的解不一定是最优的解(这里就体现了贪心算法和动态规划的区别咯,以后会说)。

通俗地讲,贪心算法,就是在小部分小结构中构造一个最优化的解法,推至大结构大数据也可以接受并成功运行的算法,主要涉及贪心思想和数学思维、不等式等。

例题:洛谷P4995——跳跳!
贪心策略:由于要使每一次的体力值消耗最多,我们只需要使每一次跳跃的高度差最大即可,对于每一次跳跃,都是最大距离的跳跃,那么对于整个过程,得到的答案也是最大的。满足最优子结构和最优解,故可以使用贪心。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int a[305];int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+1+n);a[0]=0;int low=0,high=n;int j=1;long long int sumn=0;while(low<high){sumn+=(a[high]-a[low])*(a[high]-a[low]);j++;if(j%2==0){low++;}elsehigh--;}cout<<sumn<<endl;
}

例题2:Acwing110.防晒

贪心策略:对于同一个沐浴露,可以有不同的牛来涂抹,但是若要使最终可以均摊到的牛的数量最多,则优先让minSPF大的来。先将SPF从大到小排序,对于每一个瓶子,优先让minSPF大的牛获取,因为minSPF小的可能还可以使用小于当前SPF的瓶子;

如图所示,对于牛1和牛2,都可以用p2这个沐浴露,但显然牛1更加靠前,牛2还有p1可以使用,但牛1似乎只有p2可以使用,所以选择牛1来使用这个沐浴露最好,这样可以使所用沐浴露的牛的数量最大。故此最佳策略是正确的。

#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=2507;
struct COW{int maxSPF;int minSPF;
}cow[MAXN];
struct BOTTOLE{int SPF;int num;
}b[MAXN];
bool cmp1(COW x,COW y)
{if(x.minSPF!=y.minSPF)return x.minSPF>y.minSPF;else return x.maxSPF<y.maxSPF;
}
bool cmp2(BOTTOLE x,BOTTOLE y)
{return x.SPF>y.SPF;
}
int main()
{int ans=0;int C,L;cin>>C>>L;for(int i=1;i<=C;i++){cin>>cow[i].minSPF>>cow[i].maxSPF;}for(int i=1;i<=L;i++){cin>>b[i].SPF>>b[i].num;}sort(cow+1,cow+1+C,cmp1);sort(b+1,b+L+1,cmp2);for(int i=1;i<=C;i++){for(int j=1;j<=L;j++){if(b[j].SPF>=cow[i].minSPF&&b[j].SPF<=cow[i].maxSPF&&b[j].num>0){ans++;b[j].num--;break;}}}cout<<ans<<endl;
}

ps:贪心算法没有什么固定的技巧和套路,主要是对思维灵敏度的考验,需要多刷题,多学习数学知识,有部分题目涉及到数学思维。多练!多练!多练!

ACM算法笔记(五)贪心算法相关推荐

  1. 【数据结构与算法】【算法思想】贪心算法

    贪心算法 回溯算法 分治算法 动态规划 四种基本的算法思想:贪心算法,分治算法,回溯算法,动态规划,他们不是具体算法,常用来指导我们设计具体的算法和编码等. 一:贪心算法有很多经典应用 霍夫曼编码(H ...

  2. 【算法学习】贪心算法

    参考算导第三版第16章 贪心算法 文章目录 1. 活动选择问题 1.1 活动选择问题的最优子结构 1.2 贪心选择 1.3 递归贪心算法 1.4 迭代贪心算法 2. 贪心算法原理 2.1 贪心选择性质 ...

  3. python贪心算法最短路径_贪心算法---最短路径问题

    一,贪心算法的设计思想 • 从问题的某一个初始解出发逐步逼近给定的目标,每一步都作一个不可回溯的决策,尽可能地求得最好的解.当达到某算法中的某一步不需要再继续前进时,算法停止. 二,贪心算法的基本性质 ...

  4. 算法笔记之hoorspool算法

    算法笔记之hoorspool算法 从右往左进行字符扫描,如果所有匹配成功,则找到了匹配的字串,如果遇到不匹配的时候,就需要将模式右移动,这个时候考虑的是文本与模式最后一个字符对齐的文本字符C 当字符不 ...

  5. 分治算法,动态规划算法和贪心算法的区别和联系

    分治算法,动态规划算法和贪心算法的区别和联系 (一)分治算法 分治算法为什么叫分治算法? 分治这个名字可以分成两部: 第一部分是分,表示把一个原问题分解成很多个小问题,逐个解决; 第二部分是治, 表示 ...

  6. 【算法专题】贪心算法的介绍及使用场景

    文章目录 一.什么是贪心算法 二.贪心算法的应用场景 2.1 分糖果 2.2 找零钱 2.3 区间覆盖 三.贪心算法的使用总结

  7. 三大算法之三:贪心算法及其例题详解

    目录 零.前言 1.区分贪心算法和动态规划 1.动态规划 2.贪心算法 3.共通点 2.贪心算法得到最优解的条件 1.具有优化子结构 2.具有贪心选择性 3.任务安排问题 1.问题定义 2.优化子结构 ...

  8. 贪心算法最短路径java_贪心算法-单源最短路径

    算法思想:贪心算法 实际问题:单源最短路径 编程语言:Java 问题描述 单源最短路径算法,又称迪杰斯特拉算法.其目的是寻找从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题. 算法构 ...

  9. 算法笔记 简单贪心(月饼问题)

    ** 概念 ** 贪心法是求解一类最优问题的方法,它总是考虑当前状态下局部最优(或较优)的策略,来使全局的结果达到最优(或较优).显然,如果采取较优而非最优的策略(最优策略可能不存在或是不易想到),得 ...

  10. 数据结构与算法笔记:贪心策略之BSTBBST, Hashtable+Dictionary+Map, Priority Queue~Heap, Minium Spanning Tree

    BST & BBST BST(Binary Search Tree) 二叉搜索树,也就是使用二叉树来做查找 BBST(Balanced Binary Search Tree) 平衡二叉搜索树 ...

最新文章

  1. 拼音开头有什么字_excel查找函数应用:如何提取姓名的拼音首字母
  2. 天津科技大学计算机科学与信息工程学院,天津科技大学人工智能学院欢迎您!...
  3. netty权威指南学习笔记五——分隔符和定长解码器的应用
  4. python列表元素零的移动_python列表多行
  5. 微信小程序实战篇:商品属性联动选择(案例)
  6. 前端学习(653):算数运算符
  7. “天天快报”涉黄被下架?官方回应:不是我 是山寨版APP
  8. 计算机关闭远程桌面 共享功能,win7旗舰版系统优化禁止用远程桌面共享的解决方法...
  9. python3.7语法错误_Tweepy不会安装在Python3.7上;显示“语法错误”
  10. 宏转录组方法_中山大学医学院施莽教授学术讲座:宏转录组方法在病原生物学领域的应用...
  11. tfs管理java代码_TFS2010 版本控制权限设置
  12. 《鹰猎长空》看世界范围内电影票价上涨的原因
  13. 笔记本计算机摄像头怎么打开方式,笔记本的摄像头怎么打开,手把手教你笔记本电脑摄像头如何打开...
  14. 找商网获得找商网商品详情 API 返回值说明
  15. 神经元图片结构图,人脑神经元图片
  16. 2022年广东省安全员A证第三批(主要负责人)考试题模拟考试题库及答案
  17. UI库你应该知道的基础(超实用)
  18. KISSY基础篇乄KISSY之Anim(1)
  19. 第38.1节 osg加载大tif-编译vpb
  20. mac -- brew下载非常慢(2020最新方法)

热门文章

  1. 磁头 扇区 柱面 磁盘
  2. hbase Acl授权
  3. JMeter安装图文及入门教程
  4. java-php-python-springboot智慧问诊系统计算机毕业设计
  5. 新消息,大未来 | 三段小小视频带你提前领略5G消息风采
  6. 网络安全应急响应----5、勒索病毒应急响应
  7. 上传文件限制文件大小的解决方法
  8. 华为v5服务器组硬盘卡,华为RH2288V5服务器RAID迁移(Avago SAS3408iMR RAID控制卡)
  9. Bootstrap简述
  10. 多个应用连接wifi热点的切换问题--WifiConfiguration的添加--Android M