问题描述:
给你一根长度为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){