算法导论:动态规划 切钢条问题

本文介绍了如何使用动态规划解决钢条切割问题,通过分析不同长度钢条的价值,找到最佳切割方案。初始条件和递推公式被详细阐述,同时讨论了原始递归算法的效率低下,提出备忘录法和自底向上法作为改进策略,确保每个子问题只求解一次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文字参考算法导论第十五章

问题描述:不同长度的钢条,具有不同的价值,而切割工序没有成本支出,公司管理层希望知道最佳切割方案,假定钢条的长度均为整数:用数组v[I]表示钢条长度为I所具有的价值v[] = {0,1,5,8,9,10,17,17,20,24,30};用r[I]表示长度为I的钢条能获取的最大价值,通过观察可以知道,

r[1] = 1(无切割),

r[2] = 2(无切割),

r[3] = 3(无切割),

r[4] = 10(r[4] = r[2]+r[2],切割成两段长度为2的钢条),

r[5] = 13(r[5] = r[2]+r[3],切割成长度为2和3的钢条),

r[6] = 17(无切割),r[7] = 18(r[7] = r[1]+r[6]或r[2]+r[2]+r[3]),

r[8] =22(r[8] = r[6]+r[2])

,r[9] = 25(r[9] = r[3]+r[6])

,r[10]=30(无切割),

更一般的,我们可以用更简短的钢条的最优切割收益来描述它:

r[n] = max(v[n],r[1]+r[n-1],r[2]+r[n-2],...,r[n-1]+r[1]),

首先将钢条切割成长度为I和n-I的两段,接着求哪种方案获得最优,我们必须考察所有可能的I,选取其中收益最大者,如果不做任何切割收益最大,那么选取不切割的价值。注意到,为了求解规模为n的元问题,我们先求解形式完全一样,但规模更小的子问题。首次切割后,将两段钢条看成是两个独立问题的实例。通过组合两个相关子问题的最优解,并在所有可能的两段切割方案中选取组合收益最大者,构成原问题的解,我们称其满足最优子结构,问题的最优子解由相关子问题的最优解组合而成,而这些子问题可以独立求解。

第二种求解思路:我们将钢条从左边切下长度为I的一段,只对右边剩下的长度为n-I的一段继续切割(递归求解),即问题的分解方式为:将长度为n的钢条分解为左边开始一段,以及剩余部分继续分解的结果。

#in
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值