10=3+3+4,尽量拆分成尽可能多的数,且这些数近似相等
思路:10=2+8,8=2+6,6=2+4,所以10=2+2+2+4,递推关系->动态规划
dp[i]:对i进行拆分后得到的最大乘积
i拆成两个数时:i=j+(i-j)
i拆成三个数及以上:i=j*dp[i-j]
class Solution:
def integerBreak(self, n: int) -> int:
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),dp[i-j]*j)
return dp[n]