主要思路是,用一个数组coinsUsed[]来保存找i分钱所需的硬币数,(i==maxchange就是我们正在寻找的解),用一个数组lastCoin[]来保存哪一个硬币是最后用来得到最佳找零方案的信息。coins[] 用来记录硬币零钱有哪几种,differentCoins记录下coins[]的长度。maxChange记录最后的要兑换的零钱数。该算法复杂度为O(NK),N为不同面值的硬币数目,K是我们要找的的零钱数量。
- public final class MakeChange
- {
-
-
-
-
- public static void makeChange( int [ ] coins, int differentCoins,
- int maxChange, int [ ] coinsUsed, int [ ] lastCoin )
- {
- coinsUsed[ 0 ] = 0; lastCoin[ 0 ] = 1;
-
- for( int cents = 1; cents <= maxChange; cents++ )
- {
- int minCoins = cents;
- int newCoin = 1;
-
- for( int j = 0; j < differentCoins; j++ )
- {
- if( coins[ j ] > cents )
- continue;
- if( coinsUsed[ cents - coins[ j ] ] + 1 < minCoins )
- {
- minCoins = coinsUsed[ cents - coins[ j ] ] + 1;
- newCoin = coins[ j ];
- }
- }
-
- coinsUsed[ cents ] = minCoins;
- lastCoin[ cents ] = newCoin;
- }
- }
-
-
- public static void main( String [ ] args )
- {
-
- int numCoins = 5;
- int [ ] coins = { 1, 5, 10, 21, 25 };
- int change = 0;
-
- if( args.length == 0 )
- {
- System.out.println( "Supply a monetary amount on the command line" );
- System.exit( 0 );
- }
-
- try
- { change = Integer.parseInt( args[ 0 ] ); }
- catch( NumberFormatException e )
- {
- System.out.println( e );
- System.exit( 0 );
- }
-
- int [ ] used = new int[ change + 1 ];
- int [ ] last = new int[ change + 1 ];
-
- makeChange( coins, numCoins, change, used, last );
-
- System.out.println( "Best is " + used[ change ] + " coins" );
-
- for( int i = change; i > 0; )
- {
- System.out.print( last[ i ] + " " );
- i -= last[ i ];
- }
- System.out.println( );
- }
- }
详细解释可参见教材P89
分享到:
相关推荐
一个简单的动态规划算法实例,实现硬币找零的最小硬币数以及每种面额硬币的数量。
python数据结构与算法分析,动态规划—找零问题.py
01背包问题动态规划,动态规划求解找零问题和背包问题C++代码
主要介绍了java动态规划算法——硬币找零问题,结合实例形式分析了java动态规划算法——硬币找零问题相关原理、实现方法与操作注意事项,需要的朋友可以参考下
找零的方法很多,我在此列举的只是其中之一,比较经典的,简单易懂,适合初学者。
详细的背包问题和超市找零问题的解说, 代码详细,注释清除,方便使用
主要介绍了Java动态规划之硬币找零问题实现代码,具有一定参考价值,需要的朋友可以了解下。
C++贪心算法超市找零问题代码实现,分享给大家参考一下。
[6.4.1]--411找零兑换问题的动态规划解法.srt
[6.4.1]--411找零兑换问题的动态规划解法.mp4
11085 买票找零 时间限制:1000MS 内存限制:65535K 提交次数:0 通过次数:0 题型: 编程题 语言: 无限制 Description 一场激烈足球赛即将开始,售票员紧张地卖票着……。 每张球票50元,现在有2n(1)个球迷排队...
这是一个利用动态规划的最少硬币找零算法,时间效率符合要求
一场激烈足球赛即将开始,售票员紧张地卖票着……。 每张球票50元,现在有2n(1)个球迷排队购票,其中n个...假设开始售票时售票处没有零钱可以找零。 问这2n个人有多少种排队方式,不至使售票处出现找不出零的局面?
主要介绍了Python基于回溯法子集树模板解决找零问题,简单描述了找零问题并结合具体实例形式分析了Python使用回溯法子集树模板解决找零问题的步骤、实现方法与相关操作技巧,需要的朋友可以参考下
下面是一个使用C语言实现的贪心算法示例,即“钱币找零问题”,目标是用最少的钱币数量来找零。 **题目:**给定不同面额的钱币和一个总金额,使用贪心算法计算出最少需要多少个钱币来凑出这个总金额。 要求: ...
下面是一个使用C语言实现的贪心算法示例,即“钱币找零问题”,目标是用最少的钱币数量来找零。 **题目:**给定不同面额的钱币和一个总金额,使用贪心算法计算出最少需要多少个钱币来凑出这个总金额。 要求: 1、...
c语言实现找零问题的毕业设计、课程设计
下面是一个使用C语言实现的贪心算法示例,即“钱币找零问题”,目标是用最少的钱币数量来找零。 **题目:**给定不同面额的钱币和一个总金额,使用贪心算法计算出最少需要多少个钱币来凑出这个总金额。 要求: 1、...
题目找零问题, 给个金额让你找出对应的最小硬币数目背包问题解法?
简单的找零系统,没有后台的数据库。可以实现5毛,1元硬币的显示。