public class Solution {
public int cutRope(int target) {
//动态规划
//边界值处理
if(target <2){
return 0;
}
//将大问题拆分出小问题,为了避免从上到下切分的时候重复计算小问题。
//故从下至上计算。将计算出来的值进行保存。
if(target==2){
return 1;
}
if(target == 3){
return 2;
}
//创建一个数组用于存储小问题的值
//因为target对应的值也要放进来,所以长度需要+1
//该数组存放的是长度为索引值得时候,最大乘积是多少,最大乘积放到了相应索引值的位置
int[] arr = new int[target+1];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
//从下往上开始判断
for(int i = 4;i<=target;i++){
//计算j的时候可以利用i作为基础,使用已经计算好的值
int max = 0;
for(int j=1;j<=i/2;j++){
//利用arr[j]和arr[i-j]已经计算出来了。因为这j i-j都比i小
//按照从小到大,所以肯定是已经计算出来了
int res = arr[j]*arr[i-j];
if(res>max){
max=res;
}
arr[i] = max;
}
}
return arr[target];
}
}