🗡指offer——割绳子
动态规划
/**
*割绳子
* @param length 绳子长度
*/
public static int max(int length){
if(length==1){
return 0;
}
if(length==2) {
return 1;
}
if(length==3){
return 3;
}
int max=0;
// 新建一个数组
int[] values=new int[length+1];
// 由于我们在前面已经分析过特殊情况了,所以当绳子为1,2,3时
// 我们就不割,继续保持这个值
values[1]=1;
values[2]=2;
values[3]=3;
// 从绳子长度为四开始计算最优解
for(int i=4;i<=length;i++){
//循环遍历最优解
for (int j=1;j<=i/2;j++){
int temp=values[j]*values[i-j];
if(temp>max){
max=temp;
}
}
values[i]=max;
}
return values[length];
}