给出前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
所以这就是我所遵循的方法。但是我不确定我是否正确。如果有人可以验证这种方法,我也希望能帮助我从中推导出一个公式。我不是在寻找代码,因为理解问题就足以编写代码了。
答案 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更紧凑,递归调用更少。