刷题笔记(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)--整数拆分/剪绳子(动态规划)的主要内容,如果未能解决你的问题,请参考以下文章

DP-03动态规划算法题目解析

14- I. 剪绳子☆☆☆(动态规划)

动态规划贪心剪绳子

动态规划 剪绳子

剪绳子问题(动态规划,贪婪,递归)

动态规划与贪心算法_剪绳子问题