算法1 基本方法
先将基础的0,1,2,3这几个长度的最长的长度标记出来,然后后面的,用循环来不断的寻找,最长的长度是多少,将大问题用之前的问题来代替。
java 代码
class Solution {
public int maxProductAfterCutting(int l)
{
if(l<2)
return 0;
if(l==2)
return 1;
if(l==3)
return 2;
int[] pro = new int[l+1];
pro[0]=0;
pro[1]=1;
pro[2]=2;
pro[3]=3;
int max = 0;
for(int i =4;i<=l;i++){
max = 0;
for(int j=1;j<=i/2;j++){
int prod = pro[j]*pro[i-j];
if(max<prod)
max=prod;
pro[i] = max;
}
}
max = pro[l];
return max;
}
}
算法2
贪心
贪心算法,个人理解首先要对这个问题有一个自己的看法,要思考清楚他的规律,比如本题,很明显,超过3以后,如果是4,22>13,所以遇到4就把他分成两个2,如果是5,23>14,所以遇到5,就把他分成2和3;
超过3的数,都可以转换成2和3的组合;
所以,先判断这个数包含几个3,然后,判断最后一个三是不是+1就会变成4。如果是就减去一个3,然后算出需要分多少个2;
最后将所有的3和2相乘即可。
java 代码
class Solution {
public int maxProductAfterCutting(int l)
{
if(l<2)
return 0;
if(l==2)
return 1;
if(l==3)
return 2;
int timesOf3 = l/3;
if(l-timesOf3*3==1){
timesOf3-=1;
}
int timesOf2 = (l-timesOf3*3)/2;
return (int)(Math.pow(3,timesOf3))*(int)(Math.pow(2,timesOf2));
}
}