【问题标题】:what is a good technique to output a solution using dynamic programming?使用动态编程输出解决方案的好技术是什么?
【发布时间】:2013-05-03 08:13:07
【问题描述】:

这个问题专门针对硬币找零问题。 我知道找到用于找到任何数量的零钱的最佳硬币数量的算法,我也理解它,但我不明白的是,如果你愿意找到这种解决方案的路径,我怎么能“标记”。我曾尝试使用父指针,我确信这是这样做的方法,但我根本不知道我将如何实现它。这是一个例子。 例子: 给定硬币面额:1、10、25 变化:30 最佳解决方案需要:3个硬币 使用的硬币:10、10、10

我不太擅长解决动态规划问题。

【问题讨论】:

  • 假设你知道 1 到 29 的最优解。你怎么能用它来找到 30 的解?
  • 对不起,我忘了告诉你们,我目前对这个问题的解决方案只保存在一个数组中,我没有做表。所以我有 1 -29 的解决方案,但使用的硬币数量,而不是哪个硬币。如果这应该是直观的,我很抱歉,但它真的不适合我。我想我的问题是:如果我要实现一个二维表,其中行数从 0 到 n,硬币面额从 1 到 k 作为列,每个单元格的值是多少,我将如何计算它们?
  • 您可以更有效地解决它。保留指向当前最优解的前一个最优解的指针。例如。对于 10,有一个指向零的链接。对于 20 链接到 10,对于 30 链接到 20。现在您所要做的就是回溯。 30 的链接是 20,所以 30-20 = 10,20 的链接是 10-> 20-10 = 10 和 10-0=10。这就是你如何获得 3 个 10 秒

标签: algorithm recursion dynamic-programming coin-change


【解决方案1】:

你知道 T[30] = 3。你必须找到一个 T[30-c] = 2,尝试 {1,10,25} 中的所有 c。由于 T[30-10] = 2,你知道你将使用 10 美分硬币,现在必须解决 T[20] 的问题。

重复此操作直到 T[0] = 0。

【讨论】:

    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 2011-10-08
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2021-10-16
    相关资源
    最近更新 更多