【问题标题】:Object stacking, dynamic programming对象堆叠、动态规划
【发布时间】:2017-05-12 17:07:13
【问题描述】:

我正在处理一个类似于可以通过动态规划算法解决的盒子堆叠问题的问题。我在这里阅读了关于它的帖子,但我很难理解 DP 方法,并且想要一些关于它是如何工作的解释。这是手头的问题:

给定 X 个物体,每个物体都有自己的重量“w”和强度“s”,如何 你可以堆叠很多吗?一个对象可以携带自己的 重量和它上面所有重量的总和,只要它不 超越它的力量。

我知道它有一个最优的子结构,但它的重叠子问题部分让我感到困惑。我正在尝试创建一个递归树来查看它会在哪里多次计算相同的东西,但我无法弄清楚该函数是否会采用一个或两个参数。

【问题讨论】:

标签: algorithm dynamic-programming


【解决方案1】:

如果存在良好的 DP 解决方案,则需要 2 个参数:

  • 已访问对象数或未访问对象数
  • 您目前可以负担的未访问对象的总重量(已访问对象的重量无关紧要)

为了让它工作,你必须找到排序,将对象放在下一个对象之上是没有用的。也就是说,对于任何违反此顺序的解决方案,都会有另一个解决方案遵循此顺序并且更好或相等。

您必须证明所选排序存在并明确定义。我认为马特·蒂默曼斯(Matt Timmermans)建议的简单按强度排序是不够的,因为重量有一定的意义。但这是打样的部分......

【讨论】:

    【解决方案2】:

    解决这个问题的第一步是证明你可以找到一个最佳堆栈,其中的盒子按强度从高到低排列。

    然后您只需按强度对盒子进行排序,并找出最佳堆栈中包含哪些盒子。

    递归子问题有两个参数:使用列表中位置 >= Y 的框,找到可以放在剩余强度为 X 的堆栈顶部的最佳堆栈。

    【讨论】:

      猜你喜欢
      • 2017-06-23
      • 2021-08-05
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 2018-06-11
      相关资源
      最近更新 更多