长度为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