剪绳子问题解法及对于贪心和递归算法的理解

剪绳子问题是剑指offer算法题中一道考察贪心和动态规划算法的题,在做这道题的时候有两种基本的做法:将绳子尽可能分成长度为3和2,并且优先3,另一种解法是动态规划解法;当时自己对于贪心和DP并不能区分的特别清楚,并且做完这道题还不能够完全理解,因此又借助网上资料才能窥得一二,记录如下。

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

  • 解法一:贪心算法

简单来说,就是将一段绳子分为m段,使得m段长度乘起来积最大,最直观的想法是子段肯定不是越长越好,假如不分,积就是他本身的长度(当然题干要求最少要分两段),那么就往小了分,但是1肯定不行,这样的话积就是1了,因此我们慢慢往上看:

    对于2和3: 是先分2好,还是先分3好?  3*(n-3) > 2*(n-2) 求解出来是 n>5,也就是说n>5的时候分3比分2好

    对于4:4的话先分3,那就是1*3=3,还不如不分,分2为2*2=4,所以4不分或者是分2一样,为了统一,我们遇到4就分成2+2

    对于5:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值