Algorithm 该算法是否涵盖了寻找一笔金额的最小硬币兑换的所有情况?

Algorithm 该算法是否涵盖了寻找一笔金额的最小硬币兑换的所有情况?,algorithm,dynamic-programming,Algorithm,Dynamic Programming,我正在努力解决最小硬币兑换问题。问题是: 给定一个值V,如果我们想把V美分换成V美分,并且我们有无限量的C={C1,C2,…,Cm}值的硬币,那么换硬币的最小数量是多少 我建议的算法是: 从数组arr[1..V]开始,其中V是值: 对于所有面额,初始化arr[d]=1,因为这是基本情况。如果值==一枚硬币的销毁,则只需要1枚硬币,因此它是最少的 对于i:1…V中的所有值: 计算为“i”值进行更改所需的最小硬币数量。 2.1. 这可以通过以下方式实现: 对于所有j:1…(i-1) arr[i]=m

我正在努力解决最小硬币兑换问题。问题是: 给定一个值V,如果我们想把V美分换成V美分,并且我们有无限量的C={C1,C2,…,Cm}值的硬币,那么换硬币的最小数量是多少

我建议的算法是:

从数组arr[1..V]开始,其中V是值:

  • 对于所有面额,初始化arr[d]=1,因为这是基本情况。如果值==一枚硬币的销毁,则只需要1枚硬币,因此它是最少的

  • 对于i:1…V中的所有值: 计算为“i”值进行更改所需的最小硬币数量。 2.1. 这可以通过以下方式实现: 对于所有j:1…(i-1) arr[i]=min(arr[i],arr[j]+arr[i-j])

  • 返回arr[V]

  • 这一逻辑是否有缺陷,或者是否涵盖了所有情况? 大多数DP解决方案都使用了二维阵列,我不明白为什么它们会使用O(n^2)内存空间,如果这存在并且是正确的话。
    谢谢你。

    对于无法获得某些值的情况如何

    i、 e.我们有硬币{5,6,7,8,9},我们不能生成值1,2,3,4,您应该初始化所有值!=去魔化细胞到无穷大常数或类似的东西

    现在由于大多数人使用O(n^2)内存的原因:

    这个问题有各种不同的口味,最常见的一种是每个硬币只能使用一次,在这种情况下,使用状态dp[i][j]-min的硬币,在考虑第一个i硬币后,总和为j,对大多数人来说似乎更容易理解,即使这也可以通过O(n)内存实现(只是向后循环)