问题
例子
思路
n最小为2
n=2->1+1 1*1=1
n=3->1*2=2
n=2,3是唯二的dp[x]小于x的情况。因此我们把n = 2, 3的情况特别处理
n=4->2*2=4
n>3时,如n=8:
将n分成两个数相加(1+7, 2+6, 3+5, 4+4)->
代码
class Solution {
public int cuttingRope(int n) {
if(n==2) return 1;
if(n==3) return 2;
int[] arr=new int[n+1];
arr[2]=1;
arr[3]=2;
for(int i=4; i<=n; i++) {
for(int j=1; j<=i/2; j++) {
int a=j<=3?j:arr[j];
int b=i-j<=3?i-j:arr[i-j];
arr[i]=Math.max(arr[i],a*b);
}
}
return arr[n];
}
}