思路
用到动态规划;
此题实际上是求一个数i拆分成多份后的最大乘积,那么拆分情况有下面两种:
两数相乘:j *(i - j);
两数以上相乘:j * dp(i - j);
状态转移方程为:dp[i] = max{dp(i), max{dp(i - j) * j, (i - j) * j}}
public int cuttingRope(int n) {
//dp(n) = max{dp(n), max{dp(n - m)* m, (n - m)*m}}
int[] dp = new int[n+1];
dp[2] = 1;
for(int i = 3; i <= n; i++){
int curMax = 0;
for(int j = 1; j < i; j++){
curMax = Math.max(curMax,Math.max(j * (i - j), j * dp[i - j]));
}
dp[i] = curMax;
}
return dp[n];
}