【问题标题】:Find price for Rod cutting查找棒材切割的价格
【发布时间】:2015-03-30 17:14:13
【问题描述】:

给定杆的长度和前 3 根杆的 P(价格)。我们要填写剩下的鱼竿可能得到的价格。假设我们可以根据需要切割较长的部分。

L = 1     2       3      4       5        6         7          8 
p = 3     8       12 

我们基本上希望得到每个缺失长度价格的最高价格。

我的方法 我相信,由于我们获得了长度为 1,2 和 3 的杆的最优惠价格,因此我们可以为下一个杆生成所有可能的组合。

For example to get price of rod where L = 4 
price of rod where L = 1 + rod where L =  3 = 15
price of rod where L =  2 + rode where L =  2 = 16
Therefore price of rod wehre L = 4  = 16 since 16 > 15.

For example to get price of rod where L = 5
price of rod where L = 1 + rod where L = 2 and rod where L = 2 = 19
price of rod where L = 3 + rod where L = 2  = 20
price of rod where L = 4 + rod where L = 1 = 19

所以这是我正在遵循的一种方法。但是我不确定我是否正确。如果有人可以验证这种方法并且也可以帮助我从中推导出一个公式,我也希望它。我不是在寻找代码,因为理解问题足以编写代码。

【问题讨论】:

    标签: algorithm dynamic-programming


    【解决方案1】:

    您可以在CLRS(第 15.1 节,第 360 页)中查看对此问题的变体的解释。该问题称为棒切割问题。

    您的方法是正确的,您可以将其形式化为递归关系。

    f(n) = min(f(n - i) + price(i)).    1 <= i <= n - 1
    

    其中f(n) 是购买长度为 n 的杆的最低价格。 使用 memoization,这可以在 O(n^2) 中计算。

    【讨论】:

      【解决方案2】:

      你的方法是正确的。 也可以通过 MrGreen (https://stackoverflow.com/a/29352580/13106102) 回答的另一种方式完成

      令,B(i) = 切割长度为 i 单位的棒材的最优价格,p(i)​​ = 长度为 i 单位的棒材的价格。

      公式 1:B(i) = max(1

      公式 2:B(i) = max(1

      考虑一根长度为 4 的杆,可以通过以下方式切割:

      1) 长度为 4 的未切割

      2) 3, 1

      3) 2, 2

      4) 2、1、1

      5) 1、3

      6) 1、2、1

      7) 1、1、2

      8) 1、1、1、1

      根据公式 1:

      选项1对应P(4)

      选项 2,5,6,7,8 对应 B(1) + B(3)

      选项 3,4,6,7,8 对应 B(2) + B(2)

      根据公式 2:

      选项1对应P(4)

      选项2对应P(3) + B(1)

      选项 3,4 对应于 P(2) + B(2)

      选项 5,6,7,8 对应 P(1) + B(3)

      总而言之,1 和 2 计算的是最优解,但方式不同,与 1 相比,2 更紧凑,递归调用更少。

      【讨论】:

        猜你喜欢
        • 2020-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 1970-01-01
        相关资源
        最近更新 更多