钞票找零-贪心,动态规划算法

动态规划之找零钱问题 题目: 分析:如果用贪心法,求出的未必是最优解 了,例如:【1,1,3,,4】【1,1,4,】与【3,3】,显然不对。 我们应该用动态规划的方法区求解。 钞票面值为【1,2,5】 金额为11 dp[i],代表金额i的最优解(即是最小的使用张数) 数组dp[]中存储金额1至11的最优解(最少使用钞票的数量) 在计算dp[i]的时候,dp[0]、dp[1]、dp[i-1]都是已知的 金额 i 可由下面归纳得出: i-1 与coins[0]组成 i-2 与coins[1]组成 i-3 与coins[2]组 阅读详情

好无生趣,看了人家的算法,就自己动手写写吧。

public function change()
{
    // 可用余额 面值及数量
    $arrBalance = [
        1 => 100,
        2 => 10,
        5 => 4,
        10 => 3,
        50 => 0
    ];
    // 需要找零的值
    $res = $money = 89;
    // 排序 从面值大的开始
    krsort($arrBalance);
    $arrReturn = [];
    $tmp = array_keys($arrBalance);
    while ($one = array_shift($tmp)) {
        if ($one <= $money) {
            $nums = floor($money / $one);
            $nums = $arrBalance[$one] >= $nums ? $nums : $arrBalance[$one];
            $money -= $nums * $one;
            // 更新可用量
            $arrBalance[$one] -= $nums;
        }
        $arrReturn[$one.'元'] = $nums.'张';
        if ($money == 0) {
            break;
        }
    }
    if ($money > 0) {
        echo '换零失败';
        exit;
    }
    echo $res.'找零方案:'.PHP_EOL;
    print_r($arrReturn);
}

【贪心算法】思想 & 基本要素 & 贪心算法与局部最优 & 贪心算法与动态规划的区别 & 运用贪心算法求解问题 首先我们先代入问题来认识一下贪心算法涉及的问题 找钱问题 给顾客找钱,希望找零的钞票尽可能少,零钱种类和数量限定 找钱问题满足最优子结构 最快找零(贪心):为得到最小的找零次数,每次最大程度低减少零额 活动安排问题 设 个活动都需要使用某个教室,已知它们的起始时间和结束时间,求合理的安排使得举行的活动数量最多 贪心:使得每次安排后,教室的空闲时间最多 解决过程如下: 贪心算法求得的相容活动集是最大的 第一步:证明最优解中包含结束时间最早的活动 设相容集 A 是一个最优解,其结束最早的活动为 a,则 阅读详情

相关推荐

动态规划算法设计与分析:硬币找零问题实战

动态规划(Dynamic Programming,DP)是一种用于求解具有重叠子问题和最优子结构性质问题的算法设计策略。它通过将原问题拆解为相互依赖的子问题,并保存子问题的解以避免重复计算,从而显著提升算法效率。该方法广泛应用于最优化问题,如路径规划、资源分配、字符串匹配等。与递归和递推不同,动态规划通常采用自底向上(Bottom-Up)的方式构建解,利用表格(数组)存储中间结果。以经典的“硬币找零”问题为例,我们将在后续章节中逐步剖析其动态规划建模与实现过程。

weixin_42590539的博客 546

零钱兑换

钞票面值coins = [1, 2 , 5, 7, 10],金额:14dp[i],代表金额i的最优解(最少使用张数),数组dp[]中存储金额1到14的最优解计算dp[i]时,dp[0],...dp[i-1]都是已知的,而金额i 可由:金额i-1和 1 组合,i-2和2组合,i-5和5组合,i-7和7组合,i-10和10组合。即状态i可由状态i-1,i-2, i- 5,i-7,i-10,5个状态所转...

qq_22080999的博客 1552

告别玄学调试:手把手教你读懂全志芯片的sys_config.fex配置文件(以i2c配置为例)

本文深入解析全志芯片的sys_config.fex配置文件,以I2C设备驱动为例,详细讲解从引脚定义到驱动加载的全过程。通过实战案例和高级调试技巧,帮助开发者快速掌握硬件配置与内核驱动的联动机制,提升开发效率。

weixin_33737134的博客 418

04 | 动态规划:完美解决硬币找零

这是我第一次在课程中提出最优子结构这一概念,所以咱们先了解一下。这东西乍一听有些玄乎,什么叫子问题之间必须相互独立?举一个简单的例子,你就明白了。比如说,假设你在外卖平台购买 5 斤苹果和 3 斤香蕉。由于促销的缘故,这两种水果都有一个互相独立的促销价。如果原问题是让你以最低的价格购买这些水果,你该怎么买?显然,由于这两种水果的促销价格相互独立、互不影响,你只需直接购买就能享受到最低折扣的价格。现在我们得到了正确的结果:最低价格就是直接购买这两种折扣水果。

qq_37756660的博客 2868

海量Embedding进行相似度查询和比较的方法

这个是在科研中的现实需求。例如每一个源代码文件,我们可以生成一个embedding,如果有超过5000万个embedding(例如用BERT生成5000万个embedding),怎么样有效地计算相似性呢(例如有5000个positive的embedding,想在5000万个中找到类似的)。 简单介绍一下我尝试的结果:如果直接用torch.cosine_similarity,我手里的数据估计至少要处理两个月。这时候就想到了用LSH -- Locality Sensitive Hashing,但是我之前并没怎

qysh123的专栏 4566

完美解决LBP2900打印机安装驱动提示无法识别USB及连接错误等问题(附Win11全新安装支持及卸载方案)

LBP2900打印机虽然经典老旧,但在Win11上依然可以完美使用!许多网上教程都无视安装失败后的问题,在此分享一种全新、100%有效的方法来解决驱动连接错误和无法识别USB设备的问题。无论是新安装还是卸载重装,这个方法都适用。本文整合了通用驱动包,支持Win2000到Win11系统,操作简单,轻松摆脱安装困扰,享受无忧打印体验!

心开始の未来~的博客 2万+

动态规划解决找零钱问题

贪心算法在求解找零钱的某些情况时,无法得到全局最优方案;使用动态规划,则可以保证每次都取得最优方案。

littleschemer的博客 2万+

Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程

目录1. 前言2. PCM Data Flow3. 总结 1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在Linux 音频驱动(一) ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间不能随便互相访问。因此用户如果播放音频,则需要调用copy_from_user()将用户数据从user spa

_Modest_的博客 1万+

动态规划算法求解硬币找零问题

硬币找零问题描述:现存在一堆面值为 V1、V2、V3 … 个单位的硬币,问最少需要多少个硬币才能找出总值为 T 个单位的零钱?假设这一堆面值分别为 1、2、5、21、25 元,需要找出总值 T 为 63 元的零钱。 很明显,只要拿出 3 个 21 元的硬币就凑够了 63 元了。 基于上述动态规划的思想,我们可以从 T=1 开始计算出最少需要几个硬币,然后再求 T=2 、T=3…每一次求得的结果

淡然坊 3875

遥感新手别纠结!实测ENVI 5.3、5.6、6.0三个免费版,教你混搭安装避坑

本文为遥感新手提供ENVI 5.3、5.6、6.0三个免费版的实测对比与混搭安装指南,帮助用户构建零成本高效工作流。详细解析各版本功能差异、共存安装技巧及常见问题解决方案,特别适合课程作业、毕业论文分析和遥感入门练习。

weixin_30819085的博客 471

MATLAB与ROS联合仿真——实例程序搭建思路

MATLAB与ROS联合仿真——实例程序搭建思路

慕羽★的博客 5227

php找零钱功能,钞票找零-贪心,动态规划算法

钞票找零问题是一个非常古老的问题,百度那些都有,本文将一步步的讲解关于钞票找零的算法以及优化过程.贪心算法假设有1,2,5,10面值的钞票,现在需要找零89元,我们该怎么做呢?解析一:这里面,最简单的一种方法,也就是89/1=89 了,我们只需要89张1元面值的即可,...

weixin_35692838的博客 431

【滚雪球学数学建模】第1节·建模入门+三步法+案例

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 6409

#C++初学记录(动态规划(dynamic programming)例题1 钞票)

浅入动态规划 dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems. 最近进行动态规划的学习,看到了一个很好的例子,现在把它记录下来仅供自我知识梳理 1. 从一个生活问题谈起 作者:阮行止 先...

weixin_30483013的博客 205

Python爬虫实战:基于最新技术栈的政府招标采购数据抓取与分析

对于企业、研究人员和数据分析师来说,能够高效地获取这些数据意味着可以获得宝贵的商业洞察和市场先机。随着反爬技术的不断升级和网站结构的日益复杂,传统的爬虫方法已经难以满足需求。我们将采用Selenium、Playwright等现代浏览器自动化工具,结合Scrapy框架和异步请求库,构建一个能够应对各种反爬措施的强大爬虫系统。Playwright是微软开发的浏览器自动化工具,支持Chromium、WebKit和Firefox,比Selenium更快速、更稳定。

2201_76125261的博客 1310

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

贪心算法总结示例与钞票问题

贪心算法通常也会结合其他知识点一并考察(如排序、栈、堆排序等) (预备知识)贪心法求解钞票问题 这里有几种不同面额的钞票,1元、5元、10元、20元、100元、200元的钞票无穷多张,现在使用这些钞票去支付X元的面额,问最少需要多少张? 例如X=628,我们通常会尝试从面额最大的钞票(200元)开始尝试,此时发现200元的钞票只能使用3张,此时剩余的面额是628-3*200=28元,再依次查看次最...

qq_32534441的博客 1034

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

贪心算法-纸币问题

从一个生活问题谈起  先来看看生活中经常遇到的事吧——假设您是个土豪,身上带了足够的1、5、10、20、50、100元面值的钞票。现在您的目标是凑出某个金额w,需要用到尽量少的钞票。 依据...

文摘资讯 536

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

算法-贪心算法:柠檬水找零的智慧

贪心算法,一种在每一步选择中都采取当前状态下最优的选择策略,以期达到全局最优解的方法。这种算法简单直观,易于理解和实现,特别适用于资源分配、路径寻找等场景。然而,贪心算法并不总能得到全局最优解,其适用性取决于问题的性质和约束条件。

master_chenchen的博客 1164

【贪心算法】:LeetCode860.柠檬水找零

LeetCode.柠檬水找零:使用贪心算法的思想,附带贪心策略的证明过程

Yikefore的博客 1503

[算法系列]贪心算法策略介绍+10道经典例题解析

本部分介绍“贪心算法“ 。 接下来会介绍动态规划。回顾一下之前脉络: 什么是递归?如何设计递归算法? || \/ 常见的递归算法应用(快排、归并、堆、) || \/ 深入递归本质:数学归纳,递推 || \/ 深度遍历优先搜索(DFS)、回溯、剪枝 || \/ 贪心算法、动态规划 那么贪心、动规与前面这些有什么联系呢?为什么要放在这里介绍? 首先,贪心、动规和dfs这样的搜素算法实际很相似,是为了搜索解空间获得(满足条件)的解。DFS是按照一定的(深度优

lawfree的博客 1万+

【算法专题】贪心算法

算法专题之贪心算法

YoungMLet的博客 1万+

算法 贪心算法 柠檬水找零

总之,贪心算法是解决优化问题的一种有效方法,掌握贪心算法的基本原理和高级技巧对于算法开发人员来说非常重要。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。在设计高性能系统时,贪心算法不仅可以用于解决找零问题,还可以结合其他算法(如动态规划、回溯等)一起使用,以构建更加灵活和高效的解决方案。此外,对于需要处理特殊情况的场景,可以通过添加适当的错误处理和日志记录来确保算法的健壮性和可靠性。通过扩展算法的输入和输出,可以使其适应更多的应用场景。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1177

算法沉淀——贪心算法一(leetcode真题剖析)

贪心算法(Greedy Algorithm)是一种基于贪心策略的优化算法,它通常用于求解最优化问题,每一步都选择当前状态下的最优解,以期望通过局部最优的选择最终达到全局最优。贪心算法的思想是在每一步都做出在当前状态下局部最优的选择,而不考虑未来可能造成的影响。

立志做一个高产且细节博主 3348

c语言 贪心算法 找零钱,贪心算法-找零钱(C#实现)

找零钱这个问题很清楚,无非就是始终拿可以取的最大面值来找,最后就使得张数最小了,这个实现是在假设各种面值足够多的情况下。首先拖出一个界面来,最下面是一个listbox控件对应的代码:问题比较简单,有注释using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using S...

weixin_32597009的博客 2095

算法-贪心

贪心算法

zhifou123456的博客 1666

贪心算法(一):找零钱(蓝桥杯版)

贪心法:   贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。贪心选择是采用从顶向下、以迭代的方法做出相继选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题。对于一个具体问题,要确定它是否具有贪心选择的性质,我们必须证明每一步所作的贪心选择最终能得到问题的最优解。通常可以首先证明问题的...

qq_44741914的博客 2605
上一篇: 抢红包算法
下一篇: PHP概率计算函数汇总
springdk2009
博客等级 码龄17年 1835粉丝 257原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值