【问题标题】:Dynamic Programming: Retrieve all solutions动态规划:检索所有解决方案
【发布时间】:2013-08-09 17:15:31
【问题描述】:

我已经成功地使用 DP 来获得问题的最佳解决方案。我面临的问题是,现在如果我想重建解决方案,我最终只能通过一种方法来获得最佳解决方案。有没有办法让我能够回溯所有可能导致最佳结果的方式/选择??

例如,如果我从球员 a、b、c、d 中选择一个技能为 {1、2、2、1} 的球队,我可以得到最佳球队技能数为 3,我可以得到一种可能的方法来以 {{a, b}, {c, d}} 实现此目的。我正在寻找的是一种方法,这样我就可以获得所有可以公平划分团队的方法,团队技能计数为 3 即 {{a, c}, {b, d}} 和 {{a, b}, {c, d}}

【问题讨论】:

  • 您好,请把您遇到的问题说清楚。问题一直停留,很难理解。考虑到所有玩家的技能水平,需要做什么?

标签: algorithm dynamic-programming


【解决方案1】:

如果 X 是玩家人数。 (X-1)!是可能解决方案的数量。然后,您可以使用 for 循环,将可能的解决方案作为您的长度,如果结果等于您的最佳团队技能,则将该结果存储在一个数组中。

【讨论】:

  • 您是否还需要帮助来计算最佳团队技能?如果是这样,对于像 {1, 2, 3, 1} 这样的情况,您想要什么样的结果?
  • 我已经编写了代码来获得最佳总和。 (在您的示例中,它将是 4)。您是在建议一种蛮力解决问题的方法(在所有可能的解决方案上使用 for 循环)??
【解决方案2】:

DP 的主要步骤是通过知道子问题的解决方案来找到问题的解决方案。这是通过找到子问题的最小(或最大值)值来完成的。有了它,您可以通过将问题与具有最小(或最大值)值的子问题连接起来来构建有向图。就像page 上的最后一张图片一样。要找到所有解决方案,只需从整个问题的解决方案中找到所有可能的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多