动态规划_leetcode343

#coding=utf-8

# 递归
class Solution1(object):
def integerBreak(self, n):
"""
:type n: int
:rtype: int
"""

self.memo = [-1 for i in range(n+1)]

# 将n进行分割(至少分割两部分),可以获得的最大乘积
def breakInterger(self,n):

if n == 1:
return 1

res = -1

# i + (n-i)
for i in range(1,n):
res = max(res, i* (n-i),self.breakInterger(i))
return res

# 记忆化递归
class Solution2(object):
def integerBreak(self, n):
"""
:type n: int
:rtype: int
"""
pass

# 将n进行分割(至少分割两部分),可以获得的最大乘积
def breakInterger(self,n):

if n == 1:
return 1

if self.memo[n] != -1:
return self.memo[n]



res = -1

# i + (n-i)
for i in range(1,n):
res = max( res, i* (n-i),self.breakInterger(i))


self.memo[n] = res

return self.res



# 动态规划: 先解决最基本的问题,由底向上解决原问题
class Solution3(object):
def integerBreak(self, n):
"""
:type n: int
:rtype: int
"""
self.breakInterger(n)

# 将n进行分割(至少分割两部分),可以获得的最大乘积
def breakInterger(self,n):

# 将n进行分割(至少分割两部分),可以获得的最大乘积
memo = [-1 for i in range(n+1)]

memo[1] = 1

#memo[n]
# for i in range(1,n):
# memo[n] = max(memo[n],i * (n-i), i * memo[n-i])

# #memo[2]
# for i in range(1,2):
# memo[2] = max(memo[2],i * (2-i),i*memo[2-i])
#
#
# #memo[3]
# for i in range(1,3):
# memo[3] = max(memo[3],i * (3-i), i *memo[3-i])
#
# #memo[4]
# for i in range(1, 4):
# memo[4] = max(memo[4], i * (4 - i), i * memo[4 - i])

for i in range(1,n+1):
for j in range(1,i):
memo[i] = max(memo[i], j * (i-j) ,j * memo[i-j])

print memo[n]
return memo[n]


s = Solution3()

s.integerBreak(10)

转载于:https://www.cnblogs.com/lux-ace/p/10546624.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值