查找棒材切割的价格
Find price for Rod cutting
给定杆的长度和前 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
这就是我正在遵循的方法。但是我不确定我是否正确。如果有人可以验证这种方法并且也可以帮助我从中推导出一个公式,我也希望如此。我不是在寻找代码,因为了解问题足以编写代码。
您可以在 CLRS(第 15.1 节,第 360 页)中查看此问题变体的解释。这个问题叫做棒切割问题。
你的做法是对的,可以形式化为递归关系。
f(n) = min(f(n - i) + price(i)). 1 <= i <= n - 1
其中 f(n)
是购买长度为 n 的杆的最低价格。
使用记忆,这可以在 O(n^2)
.
中计算
你的做法是正确的。
也可以按照 MrGreen ()
的回答以另一种方式完成
设,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 正在计算最优解,但计算方式不同,其中 2 与 1 相比更紧凑,递归调用更少。
给定杆的长度和前 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
这就是我正在遵循的方法。但是我不确定我是否正确。如果有人可以验证这种方法并且也可以帮助我从中推导出一个公式,我也希望如此。我不是在寻找代码,因为了解问题足以编写代码。
您可以在 CLRS(第 15.1 节,第 360 页)中查看此问题变体的解释。这个问题叫做棒切割问题。
你的做法是对的,可以形式化为递归关系。
f(n) = min(f(n - i) + price(i)). 1 <= i <= n - 1
其中 f(n)
是购买长度为 n 的杆的最低价格。
使用记忆,这可以在 O(n^2)
.
你的做法是正确的。
也可以按照 MrGreen (
设,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 正在计算最优解,但计算方式不同,其中 2 与 1 相比更紧凑,递归调用更少。