题目描述
把一根绳子剪成多段,并且使得每段的长度乘积最大。
public class cutRope14 {
/**
* ycy
* 题目描述:
* 把一根绳子剪成多段,并且使得每段的长度乘积最大。
* 解题思路:
* 根据推理常理,要尽可能分解出多个长度为3的子绳子,并且最后不要出现1,只能出现2和3;
*
*/
public static int breakLength(int n){ //简单分解为多个3,2的
if(n<=3) return n;
int count1 = n/3;
if(n-count1*3 == 1){
count1--;
}
int count2 = (n-count1*3)/2;
return (int) ((Math.pow(3, count1))*(Math.pow(2, count2)));
}
public static int DynamicbreakLength(int n){ //动态规划
int dbl[] = new int[n+1];
dbl[1] = 1;
for(int i=0;i<=n;i++){
for(int j=0;j<i;j++)//dbl[i]不分解,Math.max(j*(i-j), dbl[j]*(i-j))分解
dbl[i] = Math.max(dbl[i], Math.max(j*(i-j), dbl[j]*(i-j)) );
}
return dbl[n];
}
public static void main(String[] args) {
int n = 19;
System.out.println("n result is "+breakLength(n));
System.out.println("n result is "+DynamicbreakLength(n));
int n1 = 3;
System.out.println("n1 result is "+breakLength(n1));
}
}
扫码关注一起随时随地学习!!!就在洋葱攻城狮,更多精彩,等你来!!

该博客探讨如何将一根绳子剪成多段,以使每段的长度乘积达到最大。提供了两种解决方案:一是根据常理尽可能分解出3和2的子绳子;二是使用动态规划的方法。通过示例展示了代码实现并打印了结果。

1万+

被折叠的 条评论
为什么被折叠?



