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

欢迎来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。


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue2项目webpack3.x打包文件分割优化加载

vue2项目webpack3.x打包文件分割优化加载 0. 项目目录和依赖信息1. 开启 gzip(建议)2. vue2项目配置懒加载(建议)3. 拆分 vendor 包注意:webpack3使用CommonsChunkPlugin实现 本文使用 3 种方案进行叠加优化 优先级按以…

05.Git标签管理

Git标签管理 #创建一个标签 [rootgitlab ~/demo]#git tag -a "v1.1" -m "first" [rootgitlab ~/demo]# git tag v1.1 #查看标签信息 [rootgitlab ~/demo]# git show v1.1 tag v1.1 Tagger: quyunlong <quyunlongfoxmail.com> Date: Tue Oct 18…

httpcanary抓包某游戏思路及教程[第1期]

游戏介绍&#xff1a; 这期在线读档0花购买教程&#xff0c;存档版教程。下一期在线购买无限鲜花累计充值安卓全系统适配修改教程。 小白勿入&#xff0c;技术流资料 网盘自动获取 链接&#xff1a;https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x 提取码&#x…

数据挖掘实战-基于CNN深度学习算法构建英文文本分类模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

JZ69跳台阶

&#x1f600;前言 青蛙跳台阶是一个经典的问题&#xff0c;它描述了一只青蛙每次可以跳上1级台阶或者2级台阶&#xff0c;问跳上一个n级的台阶有多少种跳法。这个问题看似简单&#xff0c;实则蕴含了一定的数学思维和递推关系。在本文中&#xff0c;我们将通过分析问题的特性和…

python实现验证码-图片类型

1 utils.py import randomdef get_random_code():code for i in range(5):# 随机生成大写字母upper_char chr(random.randint(65, 90))lower_char chr(random.randint(97, 122))num_char str(random.randint(0, 9))res random.choice([upper_char, lower_char, num_char]…

merge and rebase

文章目录 什么是merge什么是rebasemerge和rebase的区别操作执行git merge操作git rebase操作冲突解决解决冲突的步骤 Git Merge 和 Git Rebase 都是用于集成来自不同分支的修改的 Git 命令。 什么是merge Git Merge 是将一个分支的改动合并到另一个分支的方式。当你执行一个 m…

牛客热题:链表中环的入口结点

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;**链表中环的入口结点**题目链接…

搭建并配置HTTPD文件服务及访问权限控制

一、安装HTTPD服务 yum -y install httpd 查看安装版本 httpd -v 二、HTTPD服务目录结构 conf: 存放主要的配置文件&#xff0c;如httpd.conf。 conf.d: 包含额外的配置文件&#xff0c;可以通过主配置文件包含进来。 conf.modules.d: 包含Apache模块的配置文件。 logs: 存放…

【python】python新闻数据抓取情感分析可视化(源码+数据)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

ArmSoM-Sige5 RK3576开发板 正式发布!

简介​ ArmSoM-Sige5 采用Rockchip RK3576第二代8nm高性能AIOT平台&#xff0c;6 TOPS算力NPU&#xff0c;最大可配16GB大内存。支持8K视频编解码&#xff0c;拥有丰富的接口&#xff0c;支持双千兆网口&#xff0c;WiFi6 & BT5和多种视频输出。支持多种操作系统&#xff…

如何基于nginx搭建https网站

华子目录 使用nginx的http_ssl模块建立加密传输的网站查看配置文件ssl配置文件的主要参数实验&#xff1a;搭建nginxssl加密认证的web服务器 使用nginx的http_ssl模块建立加密传输的网站 查看 [rootserver ~]# nginx -V #查看是否有--with-http_ssl_module模块&#xff0c;如…

MIPS32 指令架构

指令格式 R 类型 说明&#xff1a; 用于寄存器和寄存器操作 参数说明: Op: 指令操作码Rs: 第一个源操作数寄存器号&#xff0c;参与运算使用Rd: 目的操作数寄存器号&#xff0c;保存结果使用Shamt: 位偏移量&#xff0c;仅在位移指令使用&#xff0c;在此直接置0Func: 指令函…

uni-app scroll-view隐藏滚动条的小细节 兼容主流浏览器

开端 想写个横向滚动的列表适配浏览器&#xff0c;主要就是隐藏一下滚动条在手机上美观一点。 但是使用uni-app官方文档建议的::-webkit-scrollbar在目标标签时发现没生效。 .scroll-view_H::-webkit-scrollbar{display: none; }解决 F12看了一下&#xff0c;原来编译到浏览…

postman一直转圈圈,无法启动

解决 地址栏输入%appdata%进入此目录&#xff0c;删除%appdata%目录下的postman文件可以解决问题。

北京金融大数据有限公司X百望云签署战略合作协议 共同发布“金数数据要素流通云平台”

随着数据资产与数据要素相关政策密集出台&#xff0c;资本与实业企业均跃跃欲试。但因为没有龙头企业的方案引领和成熟的落地实践&#xff0c;市场呈谨慎观望态势&#xff0c;热度无处安放。 北京金融大数据有限公司&#xff08;以下简称“金融大数据公司”&#xff09;作为市…

基于ssm+jsp+mysql+java的人事管理系统

&#x1f49e;文末获取源码联系&#x1f649; &#x1f447;&#x1f3fb; 精选专栏推荐收藏订阅&#x1f447;&#x1f3fb; &#x1f380;《Java精选实战项目-计算机毕业设计题目推荐-期末大作业》&#x1f618;更多实战项目~ https://www.yuque.com/liuyixin-rotwn/ei3euo/d…

顺序栈--c语言实现

#include <stdio.h> #include <stdlib.h> #include <stdbool.h>#define MAXSIZE 100 // 定义栈的最大容量// 顺序栈的结构体定义 typedef struct {int data[MAXSIZE]; // 存储元素的数组int top; // 栈顶指针&#xff0c;初始化为-1表示空栈 } SqStack;// 初…

Python 操作 json 数据

在Python中&#xff0c;操作JSON数据主要包括序列化&#xff08;将Python对象转换为JSON格式&#xff09;和反序列化&#xff08;将JSON字符串转换回Python对象&#xff09;。 以下是使用Python内置的json模块进行这些操作的基本示例&#xff1a; JSON 序列化 (Serialization…

MFC 列表控件删除实例(源码下载)

1、本程序基于前期我的博客文章《MFC下拉菜单打钩图标存取实例&#xff08;源码下载) 》 2、程序功能选中列表控件某一项&#xff0c;删除按钮由禁止变为可用&#xff0c;点击删除按钮&#xff0c;选中的项将删除。 3、首先在主界面添加一个删除参数按钮。 4、在myDlg.cpp 文件…