硬币变化 - DP

Posted

技术标签:

【中文标题】硬币变化 - DP【英文标题】:Coin change - DP 【发布时间】:2015-01-01 13:58:51 【问题描述】:

我在理解动态规划中的硬币找零问题时遇到了一个小问题。 简而言之,我必须使用最少数量的硬币来更改金额。

我有 n 个面额为 1 = v1

在上面的公式中,我不明白 M(j-vi) 是什么意思。 vi必须是j-1中使用的硬币的最大值吗?

【问题讨论】:

***.com/questions/47384891/…请看。 【参考方案1】:

你正在为不同的值 j 制作成堆的硬币,命名为 M(j)。 M(j - vi) 的要点是考虑一个价值为 vi 的硬币,那么你将它添加到哪个堆才能达到价值 j?价值 j - vi 当然,因为加上你现在考虑的硬币加起来价值 j。

当然,目标是尽可能少的硬币,所以你可以通过添加一个 vi 的硬币来获得最小的堆以达到j 的值。这就是min 所做的。 +1,因为您将硬币 vi 添加到堆中以形成新堆 M(j)。

【讨论】:

【参考方案2】:

加一表示您多消费了一枚硬币,因此您所做的总变化将减少所添加硬币的数量,这就是原始 j 值减少的原因。

【讨论】:

以上是关于硬币变化 - DP的主要内容,如果未能解决你的问题,请参考以下文章

动态硬币变化算法(最佳结果)

记忆硬币变化

寻找最低硬币总量的最佳变化

最小硬币变化(无限,未绑定)打印值

硬币变化(动态编程)

如何计算硬币数量的变化?