寻找棒切割的价格

时间:2015-03-30 17:14:13

标签: algorithm dynamic-programming

给出前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

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

2 个答案:

答案 0 :(得分:1)

您可以在CLRS(第15.1节,第360页)中查看此问题的变体说明。这个问题被称为棒切割问题。

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

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

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

答案 1 :(得分:0)

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

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

公式1:B(i)= max(1 <= k <= floor(i / 2)){B(k)+ B(i-k)}和P(i)

公式2:B(i)= max(1 <= k <= i){p(k)+ B(i-k)})

考虑一根长度为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更紧凑,递归调用更少。