zoukankan      html  css  js  c++  java
  • 动态规划_leetcode213

    class Solution(object):
    def rob(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """


    if not nums:
    return 0

    length = len(nums)

    if length == 1:
    return nums[0]
    if length == 2:
    return max(nums[0],nums[1])
    if length == 3:
    return max(nums[0],nums[1],nums[2])


    # memo[i]考虑偷 nums[i,n]的箱子
    memo = [-1 for i in range(length)]

    memo[length-1] = nums[length-1]

    for i in range(length-2,0,-1):
    for j in range(i,length):

    if j+2 < length:
    memo[i] = max(memo[i],nums[j] + memo[j+2])
    else:
    memo[i] = max(memo[i],nums[j])



    # 原问题分解为 偷两边 比较 memo[1] 和 memo[0] 的最优值
    # 注意 memo[1] 的范围是 nums[1,n-1]
    # memo[0] 的范围是 nums[2,n-2]
    validValue = memo[1]

    for i in range(length):

    memo[i] = -1

    memo[length-2] = nums[length-2]

    for i in range(length-3,-1,-1):
    for j in range(i,length-1):
    if j+2 < length-1:
    memo[i] = max(memo[i],nums[j] + memo[j+2])
    else:
    memo[i] = max(memo[i],nums[j])


    return max(memo[0],validValue)


    s = Solution()

    # nm = [1,2,3,1]
    nm = [8,2,8,9,2]

    print s.rob(nm)
  • 相关阅读:
    js小程序
    事务的概念
    为期一个月培训的总结
    软件测试培训总结篇2
    软件测试培训总结篇1
    软件测试培训第30天
    软件测试培训第29天
    软件测试培训第28天
    软件测试培训第26天
    软件测试培训第27天
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10546527.html
Copyright © 2011-2022 走看看