思路:
此题看到最大,首先想到动态规划。难点在于递推方程。
我们假设n长度绳子的最大乘积为f(n),对于第一刀,我们有n-1种可能的选择,可推导出f(n)=max{f(i)*f(n-i)};
//动态规划 public int cutRope(int target){ //当长度大于3 f[n]才能得到绳子的最大乘积因为target>1,m>1 if(target==2){ return 1; } if(target==3)return 2; int [] f = new int[target+1]; f[0] = 0; f[1] = 1; f[2] = 2; f[3] = 3; for (int i = 4; i <f.length ; i++) { int max = 0; //计算f(n)*f(n-i) for (int j = 1; j <=i/2 ; j++) { int temp = f[j]*f[i-j]; max = Math.max(temp,max); } f[i] = max; } return f[target]; }