当前位置: 首页 > 知识库问答 >
问题:

DP硬币更换说明

陈嘉荣
2023-03-14

硬币兑换是一个非常普遍的问题,它问你有多少种方法可以使用硬币(C[0],C[1]…C[K-1])得到N美分的总和。DP解决方案是使用方法s(N,K)=s(N,K-1)s(N-C[K-1],K),其中s(N,K)是与前K个硬币(按升序排序)求和N的方法数量。这意味着使用前K个硬币获得N美分的方式数量是不使用第K个硬币获得相同金额的方式数量加上获得N-第K个硬币的方式数量的总和。我真的不明白你怎么会想到这个解决方案,也不明白它在逻辑上有什么意义。有人能解释一下吗?

共有1个答案

艾令秋
2023-03-14

解决DP时最重要的事情是将问题简化为一组更简单的子问题。大多数情况下,“更简单”意味着参数更小,在这种情况下,如果总和更小或剩余硬币值更小,问题就更简单。

我解决这个问题的思路是:好的,我有一套硬币,我需要数一数,我可以形成一个给定的总和。这听起来很复杂,但如果我少一枚硬币,就会容易一点。

这也有助于思考最底层的情况。在这种情况下,你知道如果你只有一枚硬币,你可以用多少种方式来形成一个给定的总和。这在某种程度上表明,简化问题可能会减少不同硬币的数量。

 类似资料:
  • 我在理解动态规划中的硬币兑换问题时遇到了一个小问题。简单地说,我必须用最少数量的硬币来兑换一笔钱。 我有n种面值为1=v1的硬币

  • 尝试为一般硬币更换问题编程一个DP解决方案,该解决方案还可以跟踪使用的硬币。到目前为止,我一直在努力给我所需的最低硬币数量,但不知道如何获得使用了哪些硬币以及使用了多少次。我尝试设置另一个表(布尔值),如果硬币被使用,但这似乎不能正常工作。有什么想法吗?

  • 问题:https://leetcode.com/problems/coin-change/ 解决方案:https://repl.it/@Stylebender/HatefulAliceBlueTransverse#index.js 我理解从“按钮式”构建dp阵列解决方案的一般概念流程,但我只是想知道关于第10行: dp[i]=数学。最小值(dp[i],1 dp[i-硬币[j]]; 当你选择当前的第

  • 动态规划变更问题(有限硬币)。我正在尝试创建一个以以下内容作为输入的程序: 输出: 输出应该是大小为1的数组,其中每个单元格代表我们需要改变单元格索引量的最佳硬币数。 假设数组的单元格位于index: 5,内容为2。这意味着为了给出5(INDEX)的变化,您需要2(单元格的内容)硬币(最佳解决方案)。 基本上,我需要这个视频的第一个数组的输出(C[p])。这与有限硬币的大区别是完全相同的问题。链接

  • https://leetcode.com/problems/coin-change 以下输入得到超时,如果19- 有人知道哪里出了问题吗?

  • 所以我对编码不熟悉,我得到了一个任务,我需要做一个程序,用四分之一、一角、五分和一美分给不到一美元的零钱。然而,作业希望程序打印所需的最低硬币数量(例如,如果我输入58美分,那么输出应该是“2个25美分,1个镍和3个便士”,而不是“2个25美分,0个10美分,1个镍和3个便士”。本质上,如果没有某种硬币,那么程序就不应该打印它)。我一直在想如何制作它,这样程序就不会打印任何不必要的硬币。 这就是我