CuttheRopeTopicDescription给你一根长度为n的绳子,请把绳子剪成m段整数长度(m和n都是整数,n>1且m>1,m<=n),每根绳子的长度记为k[1],...,k[m]。k[1]x...xk[m]的最大可能乘积是多少?比如当绳子的长度为8时,我们将其剪成三段,长度分别为2、3、3,此时得到的最大乘积为18。题目链接:剪绳子代码/***Title:CuttheRope*TitleDescription*给定一根长度为n的绳子,请将绳子切成m段整数长度(m和n均为整数,n>1且m>1,m<=n),则每根绳索的长度记录为k[1],...,k[m]。*k[1]x...xk[m]的最大可能乘积是多少?比如当绳子的长度为8时,我们将其切成三段,长度分别为2、3、3,此时得到的最大乘积为18。*提问链接:*https://www...长度为3的绳子尽可能多,不允许出现长度为1的绳子。如果是这样,取其中一根已经剪断的长度为3的绳子,将*与长度为1的绳子重新组合,将它们剪成两条长度为2的绳子。*
*证明:当n>=5,3(n-3)-n=2n-9>0,and2(n-2)-n=n-4>0.因此,在n>=5,把绳子*剪成2或3的一段会得到更大的产品。又因为3(n-3)-2(n-2)=n-5>=0,所以切成长度3的产品比长度2的产品大。**@paramtarget*@return*/publicintcutRope(inttarget){if(target<2){返回0;}如果(目标==2){返回1;}如果(目标==3){返回2;}inttimesOf3=target/3;如果(目标-timesOf3*3==1){timesOf3--;}inttimesOf2=(target-timesOf3*3)/2;返回((int)Math.pow(3,timesOf3))*((int)Math.pow(2,timesOf2));}/***方法二:动态规划**@paramtarget*@return*/publicintcutRope1(inttarget){int[]dp=newint[target+1];dp[1]=1;for(inti=2;i<=target;i++){for(intj=1;j