仅做记录:1 剪绳子问题

本文探讨了一道算法问题,如何将一根长度为n的绳子剪成整数长度的m段,使得这些段的乘积最大化。通过分析得出,当所有段长度相等时,乘积最大。当绳子长度确定时,存在唯一的最大乘积。对于长度小于4的情况需要特殊处理。文中还提及了递归解决该问题的方法,但未详细展开。
摘要由CSDN通过智能技术生成

问题描述:
给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[1],…,k[m]。请问k[1]…k[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。(题目提示了要用3来做。。。。)
1 要分为多少段合适
2 每段的大小为多少合适
长度n确定 :段数 m 和每段的大小又是息息相关的

什么情况下乘积最大的不严谨数学推导:
在这里插入图片描述
在这里插入图片描述

当且仅当X1 = X2 = … Xm成立的理解:为什么这么说就说求得了乘积的最大值了呢?这样分析:左边的一定大于等于右边的,
右边的是变化的,左边的应该是一个确定的值,但是当X1 = X2 = … Xm是两边相等,于是此时左边的值就确定了为X1X2…Xm,其它时候右边的都小于左边的,于是最大值就是当X1 = X2 = … Xm,为X1X2X3*Xm,
最大值一定是存在的,于是求得可分长度X,也可以求得分得的段数m.
e也是一个很神奇的数字。也就是说只要长度一确定,若求各分段的乘积的最大值一定是确定的,m确定,x确定。
有点绕,怎么会有种自己求自己的感觉。
在这里插入图片描述
在这里插入图片描述
我们求出最小的可分长度是3,那么切一刀,另外的长度至少为1,所以长度至少为4这个情况才成立;
小于4的需要另行判断。
代码
还有用递归做的暂时不理解
代码如下(转):


public static int cutRope(int n) {
   
        if(n==2){
   
         
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值