题解 | #打家劫舍(一)#

打家劫舍(一)

http://www.nowcoder.com/practice/c5fbf7325fbd4c0ea3d0c3ea6bc6cc79

很简单的dp,设定dp[i]为偷窃到第i家为止不被发现的做多的钱,状态转移方程如下:

dp[i]=max{dp[i1],nums[i]+dp[i+2]}dp[i]=max\{dp[i-1],nums[i]+dp[i+2] \}

其实就是每次有两种可能性,偷第i家伙不偷第i家,偷的话就肯定不能偷i-1家了,因此是dp[i-2]+nums[i],不偷的话最大就是dp[i-1]。

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @return int整型
#
class Solution:
    def rob(self , nums) -> int:
        # write code here
        # 初始化dp
        dp = [0]*len(nums)
        for i in range(len(nums)):
            if i <= 1:
                dp[i] = max(nums[:i+1])
            else:
                dp[i] = max(dp[i-1] , dp[i-2] + nums[i])
        return max(dp)

nums = [2,10,5]
print(Solution().rob(nums))
全部评论

相关推荐

菜菜狗🐶:双非之光
找工作,你会甘心进小厂还...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务