【C++】1.贪心算法:零钱兑换的奇妙之旅

news2024/11/24 0:45:11

欢迎来CILMY23的博客

本篇主题为 贪心算法:零钱兑换的奇妙之旅

个人主页:CILMY23-CSDN博客

个人专栏:  Python | C++  | C语言 | 数据结构与算法

上一篇C++博客:掌握C++函数重载和引用开启代码优化的新篇章

感谢观看,支持的可以给个一键三连,点赞评论+收藏。


 一、贪心算法介绍

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

贪心算法我们也说它是一个贪心策略,贪心策略是一种简单、高效的求解最优化问题的策略,通过局部最优选择来寻找整体的最优选择。

贪心算法的步骤:

我们通常会把问题拆解分成很多步,解决每一步的时候,我们都会追求每一步的“最优”解法,然后通过每一步的解法,我们希望得到全局的最优解。

二、贪心算法应用

应用一、零钱找零问题

假设我们有46块钱,现在的金钱面额有20元的,10元的,5元的,1元的。如何用最少的张数凑够46块钱,那所以我们凑零钱肯定是先从20块的开始找,然后找到1块钱的。这就是贪心策略,在选择钱的时候,我们总会选择当前的最优选择。 

应用二、最小路径和

我们需要找最小路径,从左上角走到右下角,我们只能向右或向下,当我们走第一步的时候,只能在1和3选择,我们选择1向下,然后我们从6和7才选到这个6,这就是贪心策略。但是当我们走到底的时候未必是全局最优解,按照目前的贪心策略得到的结果是10。 

应用三、背包问题

假设现在有三个物品1,2,3,背包中有一个容量,最大体积是9,如果只按照体积来看,我们会选择装最多的3号物品,装了九个3号物品。如果只考虑价值,我们会装了一个物品1,和2个物品 3. 这就是贪心策略的应用,在解决问题的时候,只考虑每步的“最优”选择。当然,这题我们也可以考虑单位体积的价值。

三、贪心算法的特点

3.1 贪心策略的提出

  1. 贪心策略的提出是没有标准和模板的
  2. 可能每一道题的贪心策略都是不同的

3.2 贪心策略的正确性

因为有可能在局部推算最优解的时候,贪心策略是一个“错误”的方法,正确的贪心策略我们是需要“证明”的。证明它是错的只需要一个反例,但是证明它是正确的,我们所采用的证明方法:范围是数学中所有的证明方法

证明 零钱找零 贪心策略是最优解:

如何用最少的张数换到零钱?

假设我们现在做最优解的选择,20面额的有A张,10块钱的有B张,5块钱的有C张,1块钱的有D张。当其余面额都满足上一张面值的时候,我们就会对其进行兑换。所以两张五块的我们就会换成一张十块的。我们按照这样去推测最优解,最终得到A可以有n张,B小于等于1张,C也小于等于1张,D小于等于4张。

然后我们看贪心策略 20面额的有a张,10块钱的有b张,5块钱的有c张,1块钱的有d张,而在贪心策略中,我们是能用a就用a,用不了a才用b,所以其余的张数绝对是符合,b小于等于1张,c也小于等于1张,d小于等于4张这个条件的,也因此a绝对不可能大于A,同理,b也不可能大于B,c不可能大于C,d不可能大于D。


感谢各位同伴的支持,本期贪心算法篇就讲解到这啦,如果你觉得写的不错的话,可以给个一键三连,点赞关注+收藏,若有不足,欢迎各位在评论区讨论。    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1640137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nginx--自定义日志跳转长连接文件缓存状态页

自定义日志服务 [rootlocalhost ~]# cat /apps/nginx/conf/conf.d/pc.conf server {listen 80;server_name www.fxq.com;error_log /data/nginx/logs/fxq-error.log info;access_log /data/nginx/logs/fxq-access.log main;location / {root /data/nginx/html/pc;index index…

每日OJ题_贪心算法二③_力扣1005. K 次取反后最大化的数组和

目录 力扣1005. K 次取反后最大化的数组和 解析代码 力扣1005. K 次取反后最大化的数组和 1005. K 次取反后最大化的数组和 难度 简单 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。…

智能优化算法及 MATLAB 实现(书籍推荐)

智能优化算法及 MATLAB 实现(书籍推荐) 介绍前言目录第1章 粒子群优化算法原理及其MATLAB实现第2章 哈里斯鹰优化算法原理及其MATLAB实现第3章 沙丘猫群优化算法原理及其MATLAB实现第4章 鲸鱼优化算法原理及其MATLAB实现第5章 大猩猩部队优化算法原理及其…

大模型常用的预训练数据集

文章目录 通用网页数据中文网页数据书籍维基百科代码混合型数据集 与早期的预训练语言模型相比,大语言模型需要更多的训练数据,这些数据需要涵盖广泛的内容范围。多领域、多源化的训练数据可以帮助大模型更加全面地学习真实世界的语言与知识,…

基于缓存注解的时间戳令牌防重复提交设计

文章目录 一,概述二,实现过程1、引入pom依赖2、定义缓存管理3、时间戳服务类4、模拟测试接口 三,测试过程1, 模拟批量获取2, 消费令牌 四,源码放送五,优化方向 一,概述 API接口由于…

力扣面试150 简化路径 栈 模拟

Problem: 71. 简化路径 思路 &#x1f469;‍&#x1f3eb; 三叶题解 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public String simplifyPath(String path){ArrayDeque<String> d new ArrayDeque<>();…

SpringBoot-@Transactional注解失效

Transactional注解失效 Transactional失效场景 以下是一些常见导致Transactional注解失效的场景&#xff0c;配合相应的Java代码演示&#xff1a; 1、方法修饰符非公开&#xff08;非public&#xff09; Transactional注解失效的原因在于Spring事务管理器如何实现对事务的代…

【竞技宝】意甲:退出齐尔克泽争夺战!国米免签伊朗神锋!

博洛尼亚中锋齐尔克泽成为了意甲当红炸子鸡,不少豪门球队都希望可以签下他,目前对球员有意向的俱乐部包括AC米兰、尤文图斯、阿森纳、国际米兰和曼联,看到自家球员如此有市场,博洛尼亚方面咬死5000万欧元的价格不松口,想要得到他必须要拿出真金白银。不过意甲霸主国际米兰率先退…

C++:编程语言中的永恒经典与未来之星

在计算机科学的世界里&#xff0c;C无疑是一个不可忽视的存在。它以其卓越的性能、灵活的编程风格和广泛的应用领域&#xff0c;成为了众多程序员的首选语言。本文将探讨C的历史地位、当前应用以及未来的发展趋势&#xff0c;揭示其作为编程语言中的永恒经典与未来之星的魅力。…

【C++ —— 多态】

C —— 多态 多态的概念多态的定义和实现多态的构成条件虚函数虚函数的重写虚函数重写的两个例外协变&#xff1a;析构函数的重写 C11 override和final重载、覆盖(重写)、隐藏(重定义)的对比 抽象类概念接口继承和实现继承 多态的继承虚函数表多态的原理动态绑定和静态绑定 单继…

IntelliJ IDEA - Auto filling Java call arguments 插件教程

首先&#xff0c;安装该插件&#xff0c;下载完毕后重启 IDEA 当 userService 中方法需要参数的时候&#xff0c;我们一般都是自己手动写这些参数&#xff0c;是很费劲的。因此就出现了一个插件解决这类问题 Auto filling Java call arguments 光标点击需要填写参数的位置 Alt …

【CTF-Crypto】修复RSA证书入门汇总

证书修复 文章目录 证书修复基础知识Truncated 1Truncated 2Jumbled 基础知识 为什么要引入证书&#xff1f; 在正常题目中&#xff0c;大部分直接给出了数字&#xff0c;但是数字在现实世界中传输不稳定&#xff0c;容易在某处出现错误&#xff0c;所以我们将所有的数字信息…

【skill】远程连接的Win服务器,几分钟无操作就进入登录界面

远程连接的Win服务器&#xff0c;几分钟无操作就进入登录界面&#xff0c;这时候必须输入密码或者重新连接才能进到桌面 错误的解决方法&#xff1a; 与电源管理没半毛关系&#xff01;这是远程连接的Win服务器&#xff01; 根源是“屏保”的问题&#xff0c;所以正确、有效的…

【中断】【ARM64】学习总结

optee中的异常向量表解读–中断处理解读 https://mp.weixin.qq.com/s/gBsy4YDYTHGRsy2zcVr6Vg

一键切换ip地址的软件哪个好用

随着互联网的快速发展&#xff0c;IP地址的重要性日益凸显。它不仅代表着每台设备在网络上的唯一标识&#xff0c;还关乎到我们的网络隐私、访问权限以及工作效率。一键切换IP地址的软件应运而生&#xff0c;为我们提供了极大的便利。那么&#xff0c;在众多选择中&#xff0c;…

使用jdbc方式操作ClickHouse

1、创建测试表&#xff0c;和插入测试数据 create table t_order01(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime ) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id);insert into t_order01 values …

2024年UX/UI发展趋势

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 2023年是科技创新的一年&#xff1a;我们见证了苹果虚拟眼镜的推出、人工智能驱动的衍生式设计的兴起以及三星的可折叠智能手机。网络现在融入了越来越多明亮且对比…

前沿科技应用:AIGC技术的广泛渗透

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【redis】redix在Linux下的环境配置和redis的全局命令

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

Apache SSI远程命令执行漏洞

什么是SSI Apache SSI&#xff08;Server Side Include)&#xff0c;通常称为"服务器端嵌入"或者叫"服务器端包含"&#xff0c;是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。 从技术层面来讲&#xff0c;SSI是一种在静…