码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode解题报告:198 House Robber

时间:2015-04-01 20:19:16      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:leetcode

问题描述:

一个小偷去一个街区偷东西,求偷得价值最大,唯一限制就是不能偷连续的两家,因为这样会触发警报。


建模:

给定一个列表,里面存着每家可以偷的价值,输出最大偷到的价值。


思路:动态规划

如果输入是v1v2...vm,用S[i]表示从v1v2...vi能偷到的最大价值。

递归子问题:S[i] = max(S[i-1], vi + S[i-2])

初如条件:S[0] = 0 S[1] = v1 S[2] = max(S[1], v2 + S[0])


代码:Python

class Solution:
    # @param num, a list of integer
    # @return an integer
    def rob(self, num):
        n = len(num)
        if n == 0:
            return 0
        elif n == 1:
            return num[0]
        else:
            s = [0 for i in range(n)]
            s[0] = num[0]
            s[1] = max(num[0], num[1])
            for i in range(2,n):
                s[i] = max(s[i-1], s[i-2] + num[i])
            return s[n-1]


本文出自 “Koala程序员” 博客,请务必保留此出处http://koala87.blog.51cto.com/8339141/1627312

leetcode解题报告:198 House Robber

标签:leetcode

原文地址:http://koala87.blog.51cto.com/8339141/1627312

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!