【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]