贪心算法(一)

什么是贪心算法???

贪心算法是指通过每一次都选择最优解情况,然后通过局部最优从而达到全局最优,简单理解为目光短浅,走一步看一步。

需要注意的是,贪心算法是一种思想,而非直接的方法!!!

下面我们进入具体的贪心算法中来帮助大家理解贪心其思想

一.最少硬币问题

下面我们通过leedcode上面的这题来带大家了解最简单的贪心:最少硬币问题

. - 力扣(LeetCode)

需要注意的是:

我们的钱只有三种:5 10 20

由于我们开始手里没钱,所以如果第一位顾客给的不是5元,那么直接false,如果是5元

接下来我们就需要统计我们手里的5元钱数和10元钱数,注意不需要统计20元钱数,因为20元根本不参与找钱,然后就是一边统计一边找钱,检查是否可行

贪心点:如果用户给10元我们只能找5元,但是如果用户给20元我们是有选择的,可以10+5,也可以3*5,所以这里我们优先选择10+5,就是贪心策略(保障手里的5元钱可以尽可能满足更多用户)

解题代码:

class Solution {
public:bool lemonadeChange(vector<int>& bills) {if(bills[0]!=5){return false;}else{int five=0,ten=0;for(auto i:bills){if(i==5)five++;else if(i==10){if(five==0)return false;else{five--;ten++;}}else{if(ten&&five){ten--,five--;}else if(five>=3){five-=3;}elsereturn false;}} return true;}       }
};

如果你认为选硬币就是贪心问题的话,我再带大家看一道题:

来源:洛谷

硬币问题 - 洛谷

看完题目,感觉没错就是通过局部最优,从而到全局最优情况好,现在我们来看看下面情况:

如果n==15,如果按照贪心思路,就是选11+1+1+1+1共5个硬币,但是如果选5元的只需要3个是不是就错了,实际上这题考察的是dp(动态规划)

如果你学过了dp,可以写下,但是如果你还没学,可以跳过我的代码实现:

#include<bits/stdc++.h>
using namespace std;
const int M=1e6+1;
int n;
int dp[M];
int main()
{cin>>n;for(int i=1;i<=n;i++){dp[i]=dp[i-1]+1;//注意{0,1,2,3,4,1,2,3,4,5,2,1};if(i>=5)dp[i]=min(dp[i],dp[i-5]+1);if(i>=11)dp[i]=min(dp[i],dp[i-11]+1);}cout<<dp[n]<<'\n'; return 0;
}

此时的你是不是非常好奇,什么时候是贪心呢???

贪心通常有如下两种结构:

1.最优子结构性质

当一个问题的最优解包含其子问题的最优解时,则此问题具有最优子结构

2.贪心选择性质:

问题整体的最优解可以通过一系列局部最优解得到

此时我们回到第二题,发现15元钱时,选择11元并不是其子问题最优解,也无法满足性质2

关于这方面的题,我也没有找到太多,希望大家谅解!!!

找零_牛客题霸_牛客网

答案:

#include <bits/stdc++.h>
using namespace std;
int n,coin;
int main()
{//输入cin>>n;coin=1024-n;int count=0;//贪心while(coin){if(coin>=64){coin-=64;count++;}else if(coin<64&&coin>=16){coin-=16;count++;}else if(coin<16&&coin>=4){coin-=4;count++;}else {coin-=1;count++;}}//输出cout<<count<<endl;return 0;
}

二.活动安排问题

该问题通常又叫区间调度问题

通常是指:

有非常的内容(例子:节目),完成这些内需要一定的时间,起始时间和结束时间给出,问如何合理安排才能尽可能安排最多的内容,或者问是否能够全部不冲突

该类问题关键在于选择策略:

我们该关注的是哪个时间:

A起始时间   B结束时间  C总共用时

很显然,我们最应该关注的是B,只有这样我们才能保证最大可能容纳更多的内容

如上图,我们关注结束时间,找最早结束时间,然后不断找在上一次结束时间之后的起始时间找最早结束时间,直到结束

以上是关于贪心算法思想的前一部分,我们之后会出关于后序内容,感谢大家的支持!!!

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

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

相关文章

车载以太网解决方案

车载以太网对现代汽车行业具有非常高的价值&#xff0c;随着汽车技术的不断发展&#xff0c;车载电子组件和传感器的数量与复杂度都在持续增加。为了满足这些复杂系统的需求&#xff0c;车载以太网作为一种高速数据交换介质&#xff0c;发挥着至关重要的作用。 汇迪能提供的车载…

数据的质量控制软件----fastQC

一、前言 FastQC的基本介绍: FastQC是一款基于Java的软件&#xff0c;它可以快速地对测序数据进行质量评估&#xff0c;其官网为&#xff1a;Babraham Bioinformatics - FastQC A Quality Control tool for High Throughput Sequence Data 高通量测序数据的高级质控工具输入…

7. DAX 时间函数-- DATE 日期--TOTALMTD、TOTALQTD、TOTALYTD

函数名目的语法返回值TOTALMTD计算当前上下文中该月份至今的表达式的值 。TOTALMTD ( <表达式>, <日期列>, [<筛选器>] )标量 表示表达式的标量值&#xff0c;在“日期”中给定日期&#xff0c;计算当前月份至今的日期 。TOTALQTD计算当前上下文中该季度至今…

Github 2024-04-20 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-04-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量非开发语言项目2Python项目2Swift项目2HTML项目1CSS项目1Go项目1C项目1C++项目1Rust项目1编程面试大学:成为软件工程师的全面学习计划 创建周期…

【最新可用】Claude国内镜像,可上传图片,可用Claude3全系模型,包括Pro版本的Opus),亲测比GPT好用

Claude对话、上传图片的超详细教程来啦&#xff01; 近期&#xff0c;Claude 3 Opus的发布引发了网络上的广泛关注与热议&#xff0c;有观点认为其性能已经凌驾于GPT-4之上。虽然网络上已经出现了大量基于这两款先进AI技术的实际应用案例&#xff0c;但仍有许多人对在国内如何…

Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)

文章目录 一、JavaFx介绍1、JavaFx简介2、可用性3、主要特征4、UI控件 二、JavaFx概述1、JavaFx结构图2、JavaFx组件&#xff08;1&#xff09;舞台&#xff08;2&#xff09;场景① 场景图② 节点 &#xff08;3&#xff09;控件&#xff08;4&#xff09;布局&#xff08;5&a…

Unity射击游戏开发教程:(2)实例化和销毁游戏对象

现在我们有了“飞船”,我们可以在屏幕上移动它,现在我们需要发射一些激光!与宇宙飞船一样,我们将让事情变得简单并使用 Unity 自己的基本形状。舱体的效果很好,所以我们来创建一个。 我们保存了有关位置、旋转和缩放的信息。我们想要缩小这个对象,假设每个轴上缩小到 0.2…

【声呐仿真】学习记录1-配置dave、uuv_simulator

【声呐仿真】学习记录1-配置dave、uuv_simulator 1.介绍2.配置3.一些场景 1.介绍 家|DAVE项目 — Home | Project DAVE 2.配置 参考官方教程安装|DAVE项目 — Installation | Project DAVE mkdir -p ~/uuv_ws/src cd ~/uuv_ws/src git clone https://github.com/Field-Robot…

二维图像的双线性插值

1. 原理 见下图,假设原图为单通道的灰度图,想求图像中某点Q(x,y)的灰度值。 2. 代码实现 #include <iostream> #include <stdio.h> #include <stdint.h> #include <string> #include<opencv2/opencv.hpp> #include<opencv2/core.hpp>…

踏上R语言之旅:解锁数据世界的神秘密码(二)

R语言学习 文章目录 R语言学习1.数据的R语言表示2.多元数据的R语言调用3.多元数据的简单R语言分析 总结 1.数据的R语言表示 数据框&#xff08;data frame) R语言中用函数data.frame()生成数据框&#xff0c;其句法是&#xff1a; data.frame(data1,data2,…)&#xff0c;例如…

OpenHarmony网络协议通信—kcp

kcp 是一种 ARQ 协议,可解决在网络拥堵情况下 tcp 协议的网络速度慢的问题 下载安装 直接在 OpenHarmony-SIG 仓中搜索 kcp 并下载。 使用说明 准备一套完整的 OpenHarmony 3.1 Beta 代码 库代码存放路径&#xff1a;./third_party/kcp 修改添加依赖的编译脚本 在/develo…

Bridge 2024(Br2024):革新文件管理,提升创意思维的卓越工具

Bridge 2024&#xff08;Br2024&#xff09;是一款专为Mac和Windows用户设计的数字媒体管理软件&#xff0c;以其出色的文件管理和项目管理功能&#xff0c;成为创意专业人士不可或缺的工作伙伴。这款软件不仅继承了Adobe Bridge一贯的直观界面和强大功能&#xff0c;更在多个方…

基于 LLM 大模型 Agent 的实践总结和困境分享

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 基于大模…

树莓派+Openwrt连接校园网,打破校园网设备限制

前言 因为本校学生校园网只允许最多三个设备登录&#xff0c;对于同时拥有多个联网设备的我十分不友好&#xff0c;而且大多单片机如esp32的wifi模块是只允许一般的WPA/WPA2认证的&#xff0c;是不支持校园网的portal认证。所以我决定搞一个路由器。 然后我上网买了一个TP-Li…

【ThinkPHP框架教程·Part-01】ThinkPHP6.x框架安装教程

文章目录 一、框架介绍1、框架简介和版本选择2、主要新特性 二、安装步骤1、下载并运行Composer-Setup.exe2、安装TP前切换镜像3、安装稳定版4、测试运行 一、框架介绍 1、框架简介和版本选择 Thinkphp是一种基于php的开源web应用程序开发框架ThinkPHP框架&#xff0c;是免费开…

基于注解配置bean

文章目录 1.基本使用1.基本介绍2.快速入门1.引入jar包2.MyComponent.java3.UserAction.java3.UserDao.java4.UserService.java5.beans05.xml6.断点查看bean对象是否创建7.测试 3.注意事项和细节 2.自己实现spring注解1.需求分析2.思路分析图3.编写自定义注解ComponentScan4.编写…

Mybaties入门

文章目录 介绍持久层框架Jdbc缺点Mybaties简化整体框架ORM方式 Mybaties快速入门(Mapper代理)核心配置文件映射文件配置编写会话工具类 介绍 Mybaties是一款优秀的持久层框架&#xff0c;用于简化JDBC开发 持久层 负责将数据保存到数据库的那一层代码JavaEE三层架构&#x…

【双曲几何】圆盘上的三角形概念

目录 一、说明二、对偶三角形概念2.1 反演关系2.2 对偶关系2.3 找出三角形的对偶三角形 三、正交三角形概念3.1 通过对偶三角形&#xff0c;找到垂心3.2 正交三角形的概念3.3 中心射影点的概念 四、后记 一、说明 本文对双曲空间的三角形进行分析&#xff0c;本篇首先给出&am…

漆包线行业你了解多少?专业漆包线行业MES生产管理系统

今天就说说漆包线行业&#xff0c;漆包线是工业电机&#xff08;包括电动机和发电机&#xff09;、变压器、电工仪表、电力及电子元器件、电动工具、家用电器、汽车电器等用来绕制电磁线圈的主要材料。 漆包线上游是铜杆行业&#xff0c;下游是各种消费终端&#xff0c;主要是电…

代码优化实践之税率计算问题

开篇 今天的问题来自于《编程珠玑》第三章【数据决定程序结构】&#xff0c;这里提出了几条代码优化相关的原则&#xff0c;受益不浅。下面是提到的几条原则&#xff1a; 使用数组重新编写重复代码。冗长的相似代码往往可以使用最简单的数据结构——数组来更好的表述&#xff1…