DP硬币变更说明

时间:2014-07-16 00:59:26

标签: algorithm dynamic-programming coin-change

硬币变化是一个非常受欢迎的问题,它会询问您使用硬币(C [0],C [1] ... C [K-1])可以获得多少N美分的方法。 DP解决方案是使用该方法 s(N,K)= s(N,K-1)+ s(NC [K-1],K),其中s(N,K)是与第一个K达到和N的方式的数量硬币(按升序排序)。 这意味着使用前K币制作N美分的方式的数量是达到相同金额的方式的总和,而不使用Kth硬币加到达到N-Kth硬币的方式。我真的不明白你如何能够遇到这个解决方案,以及它在逻辑上是如何理解的。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:3)

解决DP时最重要的是将问题减少到一组更简单的子问题。大多数时候“更简单”意味着具有较小的参数,并且在这种情况下,如果总和较小或者剩余硬币值较小,则问题更简单。

我的解决问题的方法是:好吧我有一套硬币,我需要计算一下我可以形成给定金额的方式。这听起来很复杂,但如果我少用一枚硬币就会容易一些。

这也有助于考虑底层案例。在这种情况下,如果您拥有的是一枚硬币,您就知道有多少种方式可以形成一个给定的金额。这在某种程度上表明减少到更简单的问题可能会减少不同硬币的数量。