1 题目
2 思想
动态规划
令 dp[i]
表示和为i时能够取到的最大乘积和。
那么就可以得到递推公式: dp[i+j] = max(dp[i],i) * j
需要注意的是,递推公式中有一个 max()
操作。
3 代码
class Solution:
def integerBreak(self, n: int) -> int:
dp = [0] * (n+1)
dp[1]=dp[2] = 1
for i in range(3,n+1):
for j in range(1,i):
# 这里有个点:就是如果 dp[i-j] 还没有i-j 大时,直接取i-j
dp[i] = max(dp[i],max(dp[i-j],i-j)*j)
# print(dp)
return dp[n]