我看到了换硬币的问题。一般来说,输入是n(要返回的更改)和可用的面额(硬币的美分值),v1
我正在读哥伦比亚大学的这张pdf,但我不明白为什么在第6张幻灯片中,我们的递归关系是1:
它代表我们已经使用过的硬币吗?
假设我的面额是这样的:d=[1,5,10,25]
。让我们也假设n,要返回的更改是26。这意味着:
C[26]=min{C[26-d[i]]1}
可表示为:
C[26]=min{C[25],C[21],C[16],C[1]}1
。
这里的“1”只是你需要添加到之前解决的子问题之一的硬币(例如:C[25],C[21])得到C[26]。
如果我们考虑一个更简单的例子,比如n=6,具有相同的面额,我们知道递归将是:
C[6]=min{C[6-d[i]}1
或:
C[6]=min{C[5], C[1]} 1
我们知道C[5]是1(因为在混音中,面额为5的5美分的最小方式是1),类似地,C[1]=1。这里的最小值只有1,所以11=2,制造6美分所需的最小硬币数是2枚。
C[p]
表示从可用硬币阵列d构建面额p的最小硬币数量。
因此,要创造这样的金额,你必须选择d[i]
这样的硬币d[i]
假设你从d中选了一枚硬币d[i]。也就是说你现在的硬币数是1。
现在要使总和p,收集更多的硬币为总和
p-d[i]
。
但是你已经有了在
C[p-d[i]
中进行求和所需的最小硬币。
这意味着一个可能的硬币计数是
1c[p-d[i]
。
但是,
d[i]
这样,您就可以理解
1
作为第一个硬币的功能,我们正在考虑使总和p
。
在硬币系统C={c1,c2,…ck}中,应改变给定的数量x,以使每个硬币ci具有给定的重量wi。我们想计算可能变化的总重量。两种变化是不同的,如果他们包含在不同的顺序相同的硬币。 如何给出上述问题的动态规划递归?我知道最小硬币兑换问题的递归(即C(x)=min{C(x-C)1 for x
我编写的代码使用动态规划解决了基本的硬币兑换问题,并给出了进行兑换所需的最小硬币数量。但是我想把每个硬币的数量存储在最小的数字里。 我试图做的是初始化数组,就像散列一样,只要找到,它就会增加的数量,即。但这并不是我想要的方式,因为它每次发现对应于时都会添加硬币。因此,在最终答案中,数字不是硬币的最终计数。 代码如下:
但是我们不能这样做吗:(是给定的可用硬币的排序集,和是它的下标,是给定的最高价值硬币) 我写的东西有什么问题吗?虽然解决方案不是动态的,但不是更有效吗?
我一直在使用动态规划研究硬币兑换问题。我尝试制作一个数组fin[],其中包含索引所需的最小硬币数,然后打印它。我已经写了一个代码,我认为应该给出正确的输出,但我不明白为什么它没有给出准确的答案。例如:对于输入:4 3 1 2 3(4是要更改的金额,3是可用硬币的类型,1 2 3是硬币值列表)输出应该是:0 1 1 2(因为我们有1,2,3作为可用硬币,需要0个硬币更改0,1个硬币更改1,1个硬币更
问题-你会得到不同面额的硬币和总金额。写一个函数来计算你需要的最少数量的硬币来组成这个数量。那里有无限的硬币供应。 我的方法——我遵循了自上而下的方法,但是使用map stl进行记忆,我得到了TLE。请帮助找出误差和估计时间复杂度。 这是我的密码-
这是我关于硬币更换问题的代码,用于打印一组硬币的总方式数和目标金额 我想知道是否有任何方法可以用相同的动态规划解决方案打印这些方法(借助内部构造的表或任何其他方法) 例如,如果一组硬币是[1,3,5],目标金额是6,那么总共有4种可能的方式。[1,1,1,1,1,1,1,],[1,1,1,3],[3,3],[1,5]]我希望这种方式的列表作为输出。