切割钢锯条售卖
题目描述:给定一段长度为n英寸的钢条和一个价格表,求切割方案,使销售收益Rn最大。
注:若长度为n英寸的钢条的价格Pn足够大,最优解可能就是完全不需要切割。
长度(i) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
价格(R) | 1 | 5 | 8 | 9 | 10 | 17 | 17 | 20 | 24 | 30 |
给定一个长度为n的钢条,该钢条经过有效切割,最多能卖出多少钱?
题目分析
在最初分析本题局部最优解的时候,陷入了误区,一直在考虑局部最优解是以分割1、2、3……段来达到最后结果,后来发现这样分析走入了误区。
本题的局部最优解:长度为i的钢条最多可卖多少钱ri
长度为n的钢条的最大收益:
情况1:不切割,一整条出售的价格pn;
情况2:将钢条分割成长度 i 和 j 两段的最大收益,ri+rj;
以长度为 4 举例:
从上述图中的分析可以看到方案C收益最大,即长度为4的锯条分成两段,每段的长度为2,收益是最大的(收益为10)。
长度为n英寸的钢条共有2^(n-1)种不同切割方案,因为在距离钢条左端 i (i=1, 2, … , n-1)英寸处,总是可以选择切割或者不切割。用普通的加法符号表示切割方案,因此7=2+2+3表示将长度为7的钢条切割为3段:2英寸,2英寸,3英寸。
若一个最优解将钢条切割为k段(1≤k≤n),那么最优切割方案 n = i1 + i2 + … + ik.
将钢条切割为长度分别为i1, i2, … , ik的小段,得到的最大收益为 Rn = Pi1 + Pi2+…+Pik
对于上面表格的价格样例,可以观察所有最优收益值Ri (i: 1~10)以及最优方案:
长度为1:切割方案1=1(无切割)。最大收益R1 = 1
长度为2:切割方案2=2(收益5),1+1=2(收益2)。最大收益R2 = 5
长度为3:切割方案3=3(收益8),1+2=3(收益6),2+1=3(收益6)。最大收益8
长度为4:切割方案4=4(收益9),1+3=4(收益9),2+2=4(收益10),3+1=4(收益9),1+1+2=4(收益7),1+2+1=4(收益7),2+1+1=4(收益7),1+1+1+1=4(收益4)。最大收益10
长度为5:切割方案5=5(10),1+4=5(10),2+3=5(13),1+1+3=5(10),2+2+1=5(11),1+1+1+1+1=5(5),其他是前面的排列。最大收益13
依次求出。。。
更一般的,对于Rn(n≥1),可以用更短的钢条的最优切割收益来描述它:
Rn = max(Pn, R1+Rn-1, R2 + Rn-2, … , Rn-1 + R1)
第一个参数Pn对应不切割