问题
例子
思路
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)->
1
∗
7
−
>
1
的
结
果
∗
7
的
结
果
2
∗
6
−
>
2
的
结
果
∗
6
的
结
果
3
∗
5
−
>
3
的
结
果
∗
5
的
结
果
4
∗
4
−
>
4
的
结
果
∗
4
的
结
果
n
=
a
+
b
,
则
a
<
=
3
时
用
a
,
否
则
用
a
r
r
[
a
]
1*7->1的结果*7的结果 2*6-> 2的结果*6的结果 3*5->3的结果*5的结果 4*4-> 4的结果*4的结果 n=a+b,则a<=3时用a,否则用arr[a]
1∗7−>1的结果∗7的结果2∗6−>2的结果∗6的结果3∗5−>3的结果∗5的结果4∗4−>4的结果∗4的结果n=a+b,则a<=3时用a,否则用arr[a]
代码
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++) {
//Math.max(j,res[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];
}
}