这道题比较简单,所以我会介绍的比较粗略:
题目:
有一个小偷想沿着马路上的房子偷东西,每家每户都有一些钱,但这条街上装了监控系统,如果相邻的两户人家都被偷了的话那么就会触发报警器。小偷的目标就是在不触发报警器的前提下,如何才能偷到最多的钱?
解答:
这道题目给的提示是使用dynamic programming来解决,也就是动态规划。动态规划的概念最重要的一点就是把问题一层层拆成规模更小的子问题。那么我们可以得出一套公式,给定nums为一维数组,数组元素代表每家所有的钱:
F(1) = nums[0]
F(2) = max(nums[0], nums[1])
F(3) = max(F(2), F(1) + nums[2])
...
F(n) = max(F(n-2) + nums[n-1], F(n-1))
PS.可能在第三步这里我们不能够准确的归纳出正确的公式,需要我们细心观察
下面献上python代码:
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
last, now = 0, 0
for i in nums:
last, now = now, max(last+i, now)
return now