动态规划-找零钱问题

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

动态规划-找零钱问题

问题描述

如果我们有面值为1元、3元和5元的硬币若干枚

问题分析

11-5=6,当需要凑齐6元时,最少的硬币数量方案再加一个5元,就是11元的最佳方案。相当于6元方案再加一个五元硬币。
于是可以得出:
dp(0)=0
dp(1)=dp(1-1)+1=1
dp(2)=dp(2-1)+1=2
dp(3)=dp(3-3)+1=1
dp(4)=dp(4-3)+1=2
dp(5)=dp(5-5)+1=1
dp(6)=dp(6-5)+1=2
dp(7)=dp(7-5)+1=3
dp(8)=dp(8-5)+1=2
dp(9)=dp(9-5)+1=3
dp(10)=dp(10-5)+1=2
dp(11)=dp(11-5)+1=3

根据上述等式可以推理出:
dp(n)=dp(n-可用的最大面值) +1

方案一:

采用动态规划,自底向上计算,保留每一个结果。需要计算从1到11每一个金额的最小硬币方案。

代码:

    public static void main(String[] args) throws Exception {
        int[] types = {1,3,5};
        for(int i=0;i<=11;i++)
            exchange(i, types);
    }  
    
    public static void exchange(int money, int[] types) throws Exception {
        List<Integer> parValues = Ints.asList(types);
        
        List<Integer> reference = minResolve(money, parVal
java 动态规划找零钱_动态规划找零钱问题 找零钱是一个经典的动态规划问题。这种问题,我建议,首先学会暴力解法,然后从暴力解法中优化出动态规划的解法,这样,更能体会动态规划的魅力。问题描述有n种不同币值的硬币硬币数量无限。给定一个数量T,求用给定硬币凑出T的方法数量。举个例子:假设币值是: {1,2,3}给定的T值: 5输出所有的组合数量: 5为啥是5呢,因为有5种不同的组合可以得到数值5,如下所示:{1,1,1,1,1}{1,1,1,2... 阅读详情

相关推荐

找零钱问题系列之动态规划

有数组penny,penny中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim(小于等于1000)代表要找的钱数,求换钱有多少种方法。给定数组penny及它的大小(小于等于50),同时给定一个整数aim,请返回有多少种方法可以凑成aim。测试样例:[1,2,4],3,3返回:2class Exchange {public:    int cou...

zrh_CSDN的博客 1018

leetcode找零钱问题动态规划-LeetCode:力码

leetcode找零钱问题动态规划 LeetCode 动态规划 一般解法 注意: 递归算法为从高到底, 动态规划算法为从底到高! 找到转移方程 题目 No.124 二叉树中的最大路径和 No.322 零钱兑换 回溯算法 一般解法 注意: 感觉有点类似于DFS的解法,时间复杂度为N! def backtrack: for 选择 in 选择列表: # 作出选择 将该选择从选择列表中移除 路径.add(选择) backtrack(路径, 选择列表) # 完成后需要撤销选择 路径.remove(选择) 将该选择再次加入到选择列表 题目 No.51 N皇后问题 BFS 注意在每一轮都要使用一个新的数组去储存下一轮的目标 在完成下一轮的目标确定后在进行层数增加 No. 111 二叉树的最小深度

【算法 - 动态规划找零钱问题

一题搞懂动态规划的 严格表依赖 有什么用? 如何进一步优化?

weixin_46879314的博客 2019

动态规划实战--硬币找零问题

实战动态规划硬币找零问题

德玛西亚 3584

动态规划-硬币找零问题四种情况

题目1:给定数组arr,arr中所有的值都是正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数。 举例:  arr[5,2,3],aim=20。  4张5元可以组成20元,其他的找钱方案都要使用更多张的货币,所以返回4。 题解: 一眼看去这道题好像可以用贪心算法可解,但是仔细分析发现有些值是不可以的,例如arr...

anhuibozhoushatu的专栏 1161

【数据结构】动态规划——找零钱问题解析(含c++和python代码)

动态规划——找零问题

verse_armour的博客 5344

【数据结构与算法】之动态规划经典问题_动态规划问题

@param coins 给定的硬币的面额。* @param amount 给定的总金额。* 计算出能组成总金额的最少硬币数量。* @return 最少的硬币数量。

2401_89317723的博客 496

动态规划求解硬币找零问题——Java实现

动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,并将这些子问题的解保存起来,如果以后在求解较大子问题的时候需要用到这些子问题的解,就可以直接取出这些已经计算过的解而免去重复运算。保存子问题的解可以使用填表方式,例如保存在数组中。  动态规划的主要难点在于理论上的设计,也就是上面4个步骤的确定,一旦设计完成,实现部分就会非常简单。使用动态规划求解问题,最重要的就是确定动态规划三要

【搜索引擎 | 机器学习 | 大数据】 6417

动态规划解决找零钱问题

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

littleschemer的博客 2万+

动态规划找零钱问题

https://blog.csdn.net/u011889952/article/details/44813593

Reaearcher-Du 6697

动态规划算法思想解决找零钱问题

前言     关于找零钱问题,网上已经有很多相关的资料以及优秀的文章博客等。这里写这篇博客的初衷很简单,就是为了方便自己,回过头来捡起这个知识能快一点,接受起来更易理解点;他人的文章写的再好,毕竟是别人的,学习起来总有一定的困难。想法上,理解上总有一些不同的地方。所以在解决这个问题后,记录下我的笔记。 一、动态规划(DP)     1.1 概念     动态规划(dynamic progr...

niaonao 2万+

java 动态规划找零钱_初探动态规划——LeetCode找零钱问题

1.简介:在leetcode上刷题的时候,遇到了一道找零钱动态规划题,后台测试用例很变态,必须把算法优化的很好才能通过。也借此机会好好的研究了一下动态规划。在下小白一个,大神轻喷。2.题目如下:image.png分析:我们可以从最简单的暴力搜索开始,先优化成记忆搜索方法,再到动态规划,最后再对动态规划进行空间优化。1)最简单的思路就是用暴力搜索的方法,枚举每一种情况,累加求和,但存在大量重复计算...

weixin_36353180的博客 1009

【算法 - 动态规划找零钱问题

一题搞懂动态规划的 严格表依赖 有什么用? 如何进一步优化?

weixin_46879314的博客 1527

找零钱问题——动态规划

摘要:本文探讨了使用动态规划算法解决硬币找零问题的方法。给定1分至1元不同面值的硬币,通过构建递推公式F(n)=Min{1+F(n-d(i))}计算找零n分所需最少硬币数。算法采用自底向上方式,初始化minNum数组存储最优解,choice数组记录硬币选择路径。代码实现展示了如何计算最少硬币数并输出具体组合方案。该方法利用动态规划的重叠子问题特性,有效避免了重复计算,确保了算法效率。参考文献提供了相关视频教程和博客资源,有助于深入理解该问题动态规划解法。

2401_86417768的博客 266

找零钱问题 python_动态规划法(二)找零钱问题

本文尝试以storyline的方式来写作,如有不足之处,还请多多包涵~~问题的诞生我们故事的主人公叫做丁丁,他是一个十几岁的小男孩,机智聪颖,是某某杂货店的小学徒。在他生活的国度里,只流通面额为1,3,4的硬币。复杂这家店的店长,叫做老王,是个勤奋实干的中年人,每天都要跟钱打交道。  有一天,他心血来潮,叫住正在摆放货物的丁丁,对他说道:“丁丁,你不是学过计算机方面的算法吗?我这里正好有个问题,不...

weixin_36322275的博客 947

python找零钱问题_$动态规划系列(2)——找零钱问题

1. 问题描述Tom在自动售货机上买了一瓶饮料,售价37美分,他投入了1美元(1美元 = 100美分),现在自动售货机需要找钱给他。售货机中现在只有四种面额的硬币:1美分、5美分、10美分、25美分,每种硬币的数量充足。现在要求使用最少数量的硬币,给Tom找钱,求出这个最少数量是多少。2. 问题分析自动售卖机需要给Tom找零钱63美分,而售卖机中只有四种面额的硬币可以使用,现在的核心问题就是如何用...

weixin_39788386的博客 723

动态规划:以找零钱问题为例

通过记录minCoins表中每一项所加的硬币,可以轻松扩展dpMakeChange,从而记录所用的硬币。如果知道上一次加的硬币,便可以减去其面值,从而找到表中前一项,并通过它知晓之前所加的硬币。许多计算机程序被用于优化某些值,例如找到两点之间的最短路径,为一组数据点找到最佳拟合线,或者找到满足一定条件的最小对象集合。,并在计算新的最少硬币数之前,检查结果是否已在表中。要进行真正的找零,不光要提供minCoins,还需要记录所用的硬币。优化问题的一个经典例子就是在找零时使用最少的硬币

ZY_yin的博客 2673

动态规划1:找零钱问题

动态规划1:找零钱问题

小菜鸟也想飞的博客 1527

动态规划找零钱问题

动态规划找零钱问题 算法思想: 遍历每一种找零钱的方式,进行比较 核心算法思想:money,找零面额value[i]注:以按照从大到小的方式排列; 计算i=1 -> money,coinsused[i],的值,记录了1->money中每一个面额所使用的找零数量; money分别减去value[i]=coinused[money-coinused[i]],并且加上次数,然

jacksoom的博客 982
上一篇: 动态规划-概述
下一篇: Java 如何确定线程池大小及其IO密集型公式验证(未完)
visitor_sam
博客等级 码龄8年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值