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]
通过截图:
扩展写法:
资料:
- 整数拆分
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]?