【leetcode】198. House Robber

题目如下:

解题思路:又是一个动态规划的场景,和爬楼梯问题的递推表达式有点类似。用dp[i](i>=3)表示从0开始到i这段子数组内可以抢劫的最大价值,对于nums[i]有两种做法,抢或者不抢,如果抢的话,dp[i-1]就不能抢了,那么dp[i] = dp[i-2]+nums[i];如果不抢,dp[i] =dp[i-1]。因此我们得到递推表达式dp[i] = max(dp[i-2]+nums[i],dp[i-1])。

代码如下:

class Solution(object):
    def rob(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if len(nums) == 0:
            return 0
        elif len(nums) == 1:
            return nums[0]
        elif len(nums) == 2:
            return max(nums)
        dp = [0 for x in nums]
        dp[0] = nums[0]
        dp[1] = max(nums[0],nums[1])

        for i in xrange(2,len(nums)):
            dp[i] = max(dp[i-1],dp[i-2]+nums[i])
        return dp[-1]

 

posted @ 2018-06-19 17:47  seyjs  阅读(182)  评论(0编辑  收藏  举报