JAVA代码—算法基础:切割钢锯条售卖的问题

本文探讨了一个经典的动态规划问题——钢锯条切割售卖。通过分析局部最优解,得出长度为n的钢条最大收益的计算方法。通过递归和动态规划两种方式求解,展示了如何在不同长度的钢条上找到最佳切割方案,以实现最大收益。
摘要由CSDN通过智能技术生成
切割钢锯条售卖

题目描述:给定一段长度为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对应不切割࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值