长度为n的绳子最多可以剪n-1次。如果剪一次将绳子分为长度分别为i和n-i的两段,得到的长度为i*(n-i);
public static int maxCut2(int length) {
int f = 0;
//*
*当某一段绳子的长度小于4,此时不需要对这段绳子再分段,或者说不分段所得到的结果才是最大的。
*这与长度为3的绳子可以得到的最大值2;长度为2的绳子可以得到的最大值1不同。
if (length<=4) {
return length;
}
//剪绳子的对称性,不需要从1遍历到length
for (int i=1;i<length/2+1;++i) {
f=Math.max(f,i*maxCut2(length-i));
}
return f;
}
public static int maxCut1(int i) {
switch (i) {
case 1:
return 0;
case 2:
return 1;
case 3:
return 2;
default:
return maxCut2(i);
}
}
public static void main(String[] args) {
System.out.println(maxCut1(15));
}
public static int maxCut3(int target) { int f = 1; int timeof3 = target/3; if (target-timeof3*3==1) { timeof3--; f = 4; } if (target-timeof3*3==2){ f= 2; } return (int) Math.pow(3,timeof3)*f; } public static void main(String[] args) { System.out.println(maxCut3(10)); }
原文:https://www.cnblogs.com/ofmou/p/13200210.html