day41 动态规划part3 代码随想录算法训练营 343. 整数拆分

题目:343. 整数拆分

我的感悟:

  • 题目很难,但我动力十足!!

理解难点:

  • 如何拆分
  • 为什么要保留dp[i]

听课笔记:

代码示例:

class Solution:
    def integerBreak(self, n: int) -> int:
        # 思路:
        # dp[i] 是到目前为止能拆分取的最大值
        # dp[i] 可以拆成j*(集合) 这里的集合可以是1个数(i-j)也可以是多个数(dp[i-j])
        dp = [0] * (n+1)
        # 初始化
        dp[2] = 1 # 从这里开始更有意义
        for i in range(3,n+1):
            for j in range(1,i//2+1):
                dp[i] = max(dp[i],j*(i-j),j*dp[i-j])
        return dp[n]

通过截图:

扩展写法:

资料:

  1. 整数拆分 

https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html

视频讲解:https://www.bilibili.com/video/BV1Mg411q7YJ

b站下面评论:

为什么要保留dp[i]?

posted @ 2024-02-23 11:29  o蹲蹲o  阅读(2)  评论(0编辑  收藏  举报