整数拆分343

题目:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。

输入:10

输出:36(10 = 3 + 3 + 4, 3 × 3 × 4 = 36)

思路:动态规划

状态转移:

1
dp[i] = max(dp[i-1],2*dp[i-2],  3*dp[i-3] , .... , (n-1) * dp[1])

状态:将整数i拆分为两个整数的和并使整数乘积最大化

边缘处理:

1
2
3
dp[0] = 1
dp[1] = 1
dp[2] = 1

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class :
def integerBreak(self, n):
"""
:type n: int
:rtype: int
"""
memo = [1,1,1]
for i in range(3,n+1):
memo.append(max([max(memo[j]*(i-j),j*(i-j)) for j in range(1,i)]))
return memo[-1]


a = Solution().integerBreak(3)
print(a)