【C++】贪心算法
贪心算法(Greedy Algorithm)是一种基于贪心策略的算法,它在每一步选择中都采取当前状态下最优的选择,以希望最终得到全局最优解。贪心算法通常适用于满足最优子结构性质的问题,即问题的最优解可以通过其子问题的最优解来构造。
贪心算法的基本思路是:
- 定义问题的目标函数,即要最大化或最小化的目标。
- 将问题分解为若干个子问题。
- 对每个子问题进行求解,选择当前最优解。
- 将每个子问题的最优解合并成原问题的解。
贪心算法的关键在于贪心策略的选择,即在每一步如何选择当前的最优解。这种选择要考虑问题的特性和约束条件,以确保选择的最优解能够导致全局最优解。
贪心算法的案例:找零钱问题(Coin Change Problem)
假设你是一个收银员,需要找零给客户。现有不同面额的硬币,包括 1 元、2 元、5 元、10 元。对于任意金额的找零,你需要找出所需的最少硬币数量。
贪心算法解决这个问题的策略是每次找零时选择面额最大的硬币,直到找完所有金额。具体步骤如下:
- 初始化所需找零金额为 x。
- 选择面额最大的硬币 c,使得 c <= x。
- 找出 x 中可以使用硬币 c 的最大数量 k。
- 更新 x =x - c * k。 如果 x 不为 0,则继续执行步骤 2;否则结束。
以下是一个示例代码来解决找零钱问题:
#include <iostream>
#include <vector>std::vector<int> coinChange(int amount, std::vector<int>& coins) {std::vector<int> result;// 从大到小排序硬币面额std::sort(coins.rbegin(), coins.rend());for (int i = 0; i < coins.size(); i++) {while (amount >= coins[i]) {result.push_back(coins[i]);amount -= coins[i];}}if (amount != 0) {// 无法凑出指定金额result.clear();}return result;
}int main() {int amount = 18;std::vector<int> coins = {10, 5, 2, 1};std::vector<int> result = coinChange(amount, coins);if (result.empty()) {std::cout << "Cannot make change for the given amount." << std::endl;} else {std::cout << "The minimum number of coins required: " << result.size() << std::endl;std::cout << "Coins used: ";for (int i = 0; i < result.size(); i++) {std::cout << result[i] << " ";}std::cout << std::endl;}return 0;
}
在上面的代码中,coinChange 函数接收一个金额和硬币面额的向量作为输入。它首先对硬币进行从大到小的排序,然后根据贪心策略依次选择面额最大的硬币,并计算所需硬币的数量。最后,返回所需硬币的向量。
在示例中,我们找零 18 元,使用的硬币面额是 {10, 5, 2, 1}。输出结果为:
The minimum number of coins required: 4
Coins used: 10 5 2 1
这表示我们需要使用 4 枚硬币(10 元、5 元、2 元和 1 元)来找零 18 元。
需要注意的是,贪心算法并不适用于所有问题,有些问题可能无法得到最优解。因此,在使用贪心算法时需要仔细分析问题的性质和约束条件,确保贪心策略的正确性。
相关文章:
【C++】贪心算法
贪心算法(Greedy Algorithm)是一种基于贪心策略的算法,它在每一步选择中都采取当前状态下最优的选择,以希望最终得到全局最优解。贪心算法通常适用于满足最优子结构性质的问题,即问题的最优解可以通过其子问题的最优解…...
记一次dockerfile无法构建问题追溯
我有一个dockerfile如下: ENTRYPOINT ["/sbin/tini","-g", "--"] CMD /home/scrapy/start.sh 我原本的用意是先启动tini,再执行下面的cmd命令启动start.sh。 为啥要用tini? 因为我的这个docker…...
React使用 useImperativeHandle 自定义暴露给父组件的实例方法(包括依赖)
关键词 React useImperativeHandle 摘要 useImperativeHandle 是 React 提供的一个自定义 Hook,用于在函数组件中显式地暴露给父组件特定实例的方法。本文将介绍 useImperativeHandle 的基本用法、常见应用场景,以及如何处理其依赖项,以帮…...
yolov5v7v8目标检测增加计数功能--免费源码
在yolo系列中,很多网友都反馈过想要在目标检测的图片上,显示计数功能。其实官方已经实现了这个功能,只不过没有把相关的参数写到图片上。所以微智启软件工作室出一篇教程,教大家如何把计数的参数打印到图片上。 一、yolov5目标检测…...
JPA常见异常 JPA可能抛出的异常
1、EntityNotFoundException(实体不存在异常): 通过 JPA 查找一个不存在的实体。 2、NonUniqueResultException(非唯一结果异常): 查询返回了多个结果,但期望只有一个结果。 3、TransactionRequiredExcep…...
Dockerfile的艺术:构建高效容器镜像的指令详解与实战指南
在容器化技术风靡全球的今天,Dockerfile作为构建 Docker 镜像的蓝图,其编写技巧与理解深度直接影响着应用部署的效率与稳定性。本文将深入剖析Dockerfile中的核心指令,以实战角度为您呈现一份详尽的解读与操作指南,并在文末抛出一…...
软件开发项目管理中各角色职责介绍
项目经理:项目经理在项目全生命周期中扮演着核心统筹与协调者的角色,负责从项目的启动、规划、执行、监控直至收尾的全过程管理。具体职责包括但不限于以下几点: 制定项目计划:依据项目业务主客户需求,明确项目范围、时…...
将时间转换为 `刚刚`、`几秒前`、`几分钟前`、`几小时前`、`几天前`、几月前或按照传入格式显示
const formatPast (date, type "default", zeroFillFlag true) > {// 定义countTime变量,用于存储计算后的数据let countTime;// 获取当前时间戳let time new Date().getTime();// 转换传入参数为时间戳let afferentTime new Date(date).getTime(…...
Oracle存储过程干货(二):PLSQL控制语句
注:本文的数据都来源于,oracle自带的emp表。 —if then elsif end if,单条件判断— declarev_grade char(1); beginv_grade : B;if v_grade A thendbms_output.put_line(哥真牛逼);elsedbms_output.put_line(哥还得加油);end if; end; /—if then els…...
深入Gradle:初识构建自动化的魅力
在软件开发的世界中,构建工具是不可或缺的一部分。它们帮助我们自动化编译、测试和打包应用程序的过程,从而节省时间并减少错误。在众多构建工具中,Gradle以其灵活性、可扩展性和卓越的性能而脱颖而出。本篇文章将带你走进Gradle的世界&#…...
cpp版ros2、opencv转换
ros2转opencv #include <opencv2/opencv.hpp> #include <cv_bridge/cv_bridge.h> #include <sensor_msgs/image_encodings.hpp> subscriber_ this->create_subscription<sensor_msgs::msg::Image>( "img", 10, std::bind(&Subs…...
使用API接口竞品价格监控
步骤一:确定监控目标和KPIs 目标:明确您希望通过监控竞品价格来实现的目标,例如保持价格竞争力、检测价格波动等。KPIs:设定关键绩效指标,如价格变动幅度、价格调整频率等。 步骤二:选择数据源和API 电商…...
Redis的BitMap的使用
简介 Redis的Bitmap不是一个独立的数据结构类型,而是基于字符串(String)类型实现的一种功能 ,存储的是二进制的文件,布隆过滤器就是基于BitMap实现的。 语句的使用 新增操作 setbit key offset value offset的首位…...
视频号带货究竟怎么做?老阳分享的项目怎么样?
在当今社会,随着互联网的快速发展,社交媒体已经成为人们日常生活中不可或缺的一部分。在这个背景下,视频号带货作为一种新兴的电商模式,逐渐崭露头角。许多人都想通过加入视频号带货行业来实现自己的财富自由。其中,老…...
AI智能分析网关V4智慧环保/智慧垃圾站视频智能分析与监控方案
一、背景介绍 随着城市化进程的加速,垃圾处理问题日益受到人们的关注,传统的垃圾站管理方式已经无法满足现代社会的需求。针对当前垃圾站的监管需求,TSINGSEE青犀可基于旗下视频智能检测AI智能分析网关V4与安防监控视频综合管理系统EasyCVR平…...
vxe-table编辑单元格动态插槽slot的使用
业务场景:表格中只有特定某一行的的单元格可以编辑,列很多,为每个列写个插槽要写很多重复代码,所以这里使用动态插槽,简化代码量。显示编辑图标,点击编辑图标隐藏。失去焦点保存调后台接口。 解决办法&…...
2024新鲜出炉阿里巴巴面试真题,如果不想35岁被淘汰这篇文章必看
最近看到群里看到一个女生,讲述了她从开始选择Android,经过非常努力的学习和挣扎,然而最后面对当前的环境却不得不放弃。看完以后真的非常替她感觉惋惜,如果早几年入行可能结果会比现在好很多,但可惜,这就是…...
设计模式(含7大原则)面试题
目录 主要参考文章 设计模式的目的 设计模式的七大原则 设计模式的三大分类及关键点 1、创建型模式(用于解耦对象的实例化过程) 2、结构型模式 3、行为型模式 23种设计模式(乱序--现学现写,不全面--应付面试为主ÿ…...
claude3科普
Claude 3 是一系列由 Anthropic 推出的新一代 语言模型(LLMs)。Anthropic 是一家人工智能初创公司,其背后的投资者包括亚马逊等,总投资额达到 40亿美元12。 这一系列模型分为三个不同级别的能力,分别是: …...
2024中国·北京预制菜产业博览会
2024中国北京预制菜产业博览会 时间:2024年5月25-27日 地点:北京中国国际展览中心 主办单位:北京鸿利展览服务有限公司 承办单位:北京预制菜博览会组委会 北京鸿利展览服务有限公司 预制菜产业“一头连着餐桌,一头…...
零克云联合创始人占冰强:如何借助OpenClaw为企业AI变革提速!
3月28日,由MoltBank&聚鲸科技、AIGCLink联合主办的“赢在OpenClaw北京站”闭门分享会,在北京成功举行。本次活动聚焦AI Agent落地、AI商业场景落地、AI法律合规边界等关键议题。在演讲环节,零克云联合创始人兼COO占冰强分享了:…...
7个实用技巧让Continue AI编程助手提升开发效率
7个实用技巧让Continue AI编程助手提升开发效率 【免费下载链接】continue ⏩ Source-controlled AI checks, enforceable in CI. Powered by the open-source Continue CLI 项目地址: https://gitcode.com/GitHub_Trending/co/continue 在当今快节奏的开发环境中&#…...
Intv_AI_MK11跨平台开发体验:在Windows WSL2中无缝使用GPU进行模型调试
Intv_AI_MK11跨平台开发体验:在Windows WSL2中无缝使用GPU进行模型调试 1. 为什么选择WSL2进行AI开发 对于习惯Windows系统的开发者来说,直接使用Linux环境进行AI模型开发往往面临诸多不便。WSL2(Windows Subsystem for Linux 2)…...
用C#和ONNX Runtime搞定车牌识别:从模型部署到双层车牌分割的实战避坑
C#与ONNX Runtime实战:车牌识别系统开发全流程与双层车牌处理精要 车牌识别技术已经从实验室走向了各行各业,从停车场管理到交通执法,再到智慧城市建设,这项技术正在改变我们与车辆的交互方式。作为一名长期奋战在计算机视觉一线的…...
Awesome-Awesome终极指南:如何快速找到任何技术领域的最佳资源
Awesome-Awesome终极指南:如何快速找到任何技术领域的最佳资源 【免费下载链接】awesome-awesome A curated list of awesome curated lists of many topics. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-awesome 在技术学习和开发过程中ÿ…...
实战踩坑:在华为ENSP模拟器上配置OSPF NSSA区域,为什么外部路由没传出去?
华为ENSP模拟器中OSPF NSSA区域外部路由失效的深度排查指南 当你在华为ENSP模拟器中配置OSPF NSSA区域时,是否遇到过这样的困境:明明按照教程步骤操作,外部路由却像被黑洞吞噬一般无法传递到其他区域?本文将带你深入这个技术迷宫的…...
Adobe软件非正版弹窗终极解决方案:PS/Ai/PR/AE禁用提示一键清除指南
1. Adobe弹窗问题的根源分析 最近不少朋友打开Photoshop、Illustrator这些Adobe软件时,突然跳出一个烦人的提示框:"Your non-genuine Adobe app will be disabled soon"。这个警告不仅影响使用体验,严重时还会导致软件直接罢工。作…...
新手入门:借助快马AI实现你的第一个超能力选择网页
作为一个刚接触编程的新手,我最近想尝试做一个有趣的网页项目。看到网上那些酷炫的交互效果,总觉得很神奇但又无从下手。直到发现了InsCode(快马)平台,它让我这个小白也能轻松实现"超能力选择器"这样的创意想法。 项目构思 我想做一…...
解锁Unity游戏定制潜能:MelonLoader全方位应用指南
解锁Unity游戏定制潜能:MelonLoader全方位应用指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 副标题ÿ…...
Qwen3-ASR-1.7B效果展示:实测多语言语音识别,准确率超高
Qwen3-ASR-1.7B效果展示:实测多语言语音识别,准确率超高 1. 开篇:一款让人惊艳的语音识别模型 最近测试了Qwen3-ASR-1.7B这款语音识别模型,结果让我大吃一惊。作为一款中等规模的模型,它在多语言识别上的表现完全不输…...
