我很难弄清楚如何解释这个问题。我目前正在尝试创建一个程序以在我的编程课上获得额外的学分,但我什至不了解它背后的数学......所以如果有人能帮助我,我会很高兴。好的:
假设您有 1 分硬币和 4 分硬币。允许的硬币总数为 4。该值的最大覆盖范围为 11。图表如下。
Value | 1 cent | 4 cent
1 | 1
2 | 2
3 | 3
4 | 4
5 | 1 | 1
6 | 2 | 1
7 | 3 | 1
8 | | 2
9 | 1 | 2
10 | 2 | 2
11 | Maximum
S0 这是一个例子。我需要为数量更多的东西做这个。但如果有人能帮助我解释数学,我会很高兴。或者等式是什么......这让我发疯。
我试图实现背包算法的一个版本,但它似乎并没有起到作用。如果有人可以提供帮助,将不胜感激。我不确定我是否能够做到这一点,或者我是否需要为此解决方案使用贪婪算法。它基本上是对贪心算法的一种扭曲。
编辑:改为 11
最佳答案
动态规划 (DP) 是解决问题的方法。 DP 通常涉及找到一些您可以根据该属性的其他值计算的基本属性 - 一种归纳推理形式。
在您的情况下,您需要问的基本问题是:“我可以恰好使用 k 个硬币赚取 n 美分吗”。这是一个简单的 boolean 值是/否;因为您可以重复使用硬币,所以您不需要知道如何用k
硬币制作n
美分,只需要知道它是否可能。这隐含地定义了一个 boolean 矩阵 A[n][k]
,其中 A[n][k] = TRUE
当且仅当您可以使 n
给定硬币种类的 k
分。
研究真值表中各个条目之间的关系。例如,如果我可以用 2 个硬币赚 5 美分,那么我可以用 3 个硬币分别赚 6 美分和 9 美分(为什么?);因此 A[5][2]
意味着 A[6][3]
和 A[9][3]
。
祝你好运!
关于java - 硬币找零 - 寻找最大数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15351800/