剪绳子问题-动态规划

给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别是2、3、3的三段,此时得到的最大的乘积是18.

可以把大问题分解成几个小问题,分解后每个小问题也存在最优解,如果把小问题的最优解组合起来能够得到整个问题的最优解,我们可以用动态规划解决这个问题。

动态规划解题的特点一:求一个问题的最优解。结合本题就是就割断绳子长度的乘积最大值。

动态规划解题的特点二:正整体最优解依赖于各个子问题的最优解。加入第一刀剪在i的位置,绳子变为i和n-i两段,同样用最优化的方法把这两段分别剪成若干段,使得各自剪出来的每段绳子的长度乘积最大。

动态规划解题的特点三:各个小问题之间还有重叠的部分。如长度为10,把10剪成4和6两段,f(2)又是f(4)和f(6)的公共的更小的子问题。

动态规划解题的特点四:由于子问题再分解大问题的过程中重复出现,为了避免重复求解子问题,我们可以用从下往上的顺序先计算小问题的最优解并存储下来,再以此为基础求取大问题的最优解。

对于此题在剪第一刀的时候,我们有n-1种选择,也就是一段绳子的可能长度分别是1,2,...,n-1,因此f(n)=max(f(i)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值