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

硬币变化:重叠的子问题是什么?

申屠宗清
2023-03-14

这是uva问题的根源。在线法官。组织机构

这个问题基本上是说:
给定N笔必须给的钱!!我们需要找出我们能给多少最低硬币,以及这些硬币的总价值,这样使用n个给定面额给的额外金额就最小了!

例如:

1400 -> N 
3    -> no of denominations 
500 
1000 
2000

Output: 1500 2

我的问题是:
这里的重叠子问题是什么?

我的意思是:
有重叠的子问题吗<因为我找不到任何。。。

共有1个答案

史鸿运
2023-03-14

重叠的子问题是硬币/钞票的最小数量,总和为特定的美分数。

for coin_value in coins(sorted)
   for sum where num[sum] is valid
      num[ sum + coin_value ] = Min( num[sum + coin_value], num[sum] + 1 )

请参阅:动态编程硬币更换有限硬币

问题的约束条件足够低,您可以使用该问题的公认答案。唯一的区别是,您计算出最低数量的硬币/纸币,以达到目标价格,然后继续超过目标价格。填充完数组后,从目标价格开始,然后向上,直到找到有效答案。

对硬币/钞票进行排序,从最大面额开始,然后往下走。

(我的解决方案在UVa上被接受。)

 类似资料:
  • 我需要编写一个算法,它接收一个数字和一个数字列表,并从列表中返回可能的数字组合的数量,从而可以创建和数。例如:def coin(5,[1,2,5,6]应该返回数字4,因为列表中有4种可能的组合可以一起创建数字5。下面是我尝试过的代码,但它不起作用。输出是6而不是4,我希望您能帮助我理解为什么。

  • 我试图解决的问题是:给定一个硬币列表和一个总和,找出所有可能的方法来使用这些硬币形成总和(你可以无限时间使用一个硬币),例如:4和[1,2,3]将给出答案[1,1,1,1,1],[1,1,2],[2,2],[1,3](这里有三种类型的硬币,价值为1,2和3)。以下是我对这个问题的尝试: 在这里,我尝试使用动态编程来跟踪我已经尝试过的值。我得到的答案是: 这当然是错误的。程序运行后备忘录的演变为:

  • 我们得到了一套面额和总额。 每种面额的无限硬币都可以买到 所有面额都是5的幂 我们必须找到总数所需的最低硬币数量。 我想知道解决方案背后的逻辑。提前感谢。

  • 给定一个值N,如果我们想改变为N美分,并且我们有无限量的S={S1,S2,...,Sm}值的硬币,我们有多少种方法可以改变?硬币的顺序并不重要。不过还有一个额外的限制:你只能用正好是K的硬币换零钱。 例如,对于N=4,k=2和S={1,2,3},有两个解:{2,2},{1,3}。所以输出应该是2。 解决方案: 以上是递归解决方案。但是,我需要有关动态规划解决方案的帮助: 让表示与元素和硬币的总和。

  • 为了使动态规划适用,一个问题必须具有两个关键属性:最优子结构和重叠子问题[1]。对于这个问题,我们将只关注后一个属性。 重叠子问题有多种定义,其中两个是: 如果一个问题可以分解为多次重用的子问题,或者问题的递归算法一遍又一遍地解决同一个子问题,而不是总是产生新的子问题,那么问题就被称为具有重叠的子问题[2]。 要应用动态规划,优化问题必须具备的第二个要素是子问题的空间必须“小”,因为问题的递归算法

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