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]