algorithm - 动态规划求最小硬币数

标签 algorithm dynamic dynamic-programming

作为我的 HW,我正在尝试理解我的问题的一部分,但它看起来真的很像中文......

假设我们有硬币x_1, x_2, x_3, ... x_nx_1 = 1 总是。 我们想以最少数量的硬币给予一定数量的钱。 然后我们使用动态规划。

现在我不明白这个 - c(i,j) = min { c(i-1,j), 1+c(i,j-x_i) } 其中 c(i,j) 是返回金额 j 的最小硬币数量。

最佳答案

c(i,j-x_i) 是获得值 j-x_i 的最少硬币数量,仅使用硬币 i,i+1, ...,n(这是归纳假设,这就是递归公式向我们保证的)。
因此,1+c(i,j-x_i) 是获得 j-x_i 的最小方法,其中包含给定的一组硬币 + 一个额外的硬币值x_i,我们决定使用它。

据此,c(i,j) = min { c(i-1,j), 1+c(i,j-x_i) } 实际上是在选择“什么是最好的”详尽无遗:

  1. 获取当前硬币,并递归检查其余的较小问题
  2. 决定不接受它 - 然后再次递归地检查较小的问题。

取其中的最小值可以确保我们(因为它已穷尽所有可能性)c(i,j) 是最小值。

关于algorithm - 动态规划求最小硬币数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13273847/

相关文章:

algorithm - 构建 "connected matrix"的成本

algorithm - 2D Box stacking no duplicates with height limit

algorithm - 使用电话键盘生成 10 位数字

algorithm - 计算所有距离的总和

vb.net - 在VB.Net中动态添加图片框

python - 从社区共现矩阵到每个节点的社区索引

ios - 如何检测用户正在输入消息?

c - 如何在国际象棋 AI 中正确检查 caSTLing?

android - Android中大量数据的ListView的动态高度

c# - 使用 C# 反射读取对象数组的元素