刷题笔记(17)--整数拆分/剪绳子(动态规划)
Posted HardyDragon_CC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题笔记(17)--整数拆分/剪绳子(动态规划)相关的知识,希望对你有一定的参考价值。
相同题目:整数拆分
使用动态规划解题:
- 使用dp数组存储直到 n 的最大乘积。
- dp[n] 就是要返回结果
- dp[0] = dp[1] = 0 : 这意味dp数组从索引 2 开始递推
- dp[i] 存放 i 的最大乘积
- dp[i] 有两种情况:假设 j 是其中一段的长度,另一个乘积有两种可能
- 只有两段 j、i-j ; 其乘积是 j * (i-j) :题目要求 m>1,所以至少两个,即 j 不能等于 0;
- 或者 j 和 dp[i-j] 多段构成,dp[i-j] 是之前存储的 i-j 的最大乘积
- 使用 max 函数和当前 curMax 比较取最大值,保留多个结果中的最大值;
class Solution {
public int cuttingRope(int n) {
int[] dp = new int[n+1];
for(int i=2;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];
}
}
以上是关于刷题笔记(17)--整数拆分/剪绳子(动态规划)的主要内容,如果未能解决你的问题,请参考以下文章