一直在试图理解如何在这个页面上使用动态编程
给出一个N个硬币的列表,它们的值(V1,V2,…,VN)和总和S。找出最小数量的硬币,其总和为S(我们可以使用任意数量的一种类型的硬币),或者报告说,不可能以这样的方式选择硬币,它们的总和是S
给定的硬币值为1、3和5。 和S设为11。在
Set Min[i] equal to Infinity for all of i
Min[0]=0
For i = 1 to S
For j = 0 to N - 1
If (Vj<=i AND Min[i-Vj]+1<Min[i])
Then Min[i]=Min[i-Vj]+1
Output Min[S]
我不明白为什么我们要给我所有人设置无穷大
更让人困惑的是当总和是1时
^{pr2}$Min[1]不是未定义的吗?代码不会在这里失效吗?为什么他们要加+1??在
还是会因为它是无限的而继续下去?为什么他们在这里用无限?他们从哪里得到的?在
总的来说,我发现他们的解释很难理解。在
希望这是一个直译:
如果您打印mn,您将看到:
^{pr2}$与表格相同:
S
表示所需的总额,coins[j]
相当于Vj
,N
是指硬币。在内环可以移除,只需在硬币上重复:
^{4}$相关问题 更多 >
编程相关推荐