题目描述:
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
思路:
这是一道标准的动态规划问题,创建一个list保存小偷到每个房间能拿到最多的钱,第一个房间为本身,第二个为前两个房间较大者。第i个房间便为(状态转移方程):
dp[i] = max(dp[i - 1], dp[i - 2] + nums[i])
AC代码:
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
dp = [0] * len(nums)
if not nums:
return 0
elif len(nums) == 1:
return nums[0]
dp[0] = nums[0]
dp[1] = max(nums[0], nums[1])
for i in range(2, len(nums)):
dp[i] = max(nums[i] + dp[i - 2], dp[i - 1])
return dp[-1]
本文探讨了一个经典的动态规划问题——打家劫舍。在这个问题中,一个小偷计划抢劫一条街上的房屋,每栋房子都有一定的现金储备。但若两栋相邻的房子在同一晚被抢劫,则会触发警报。因此,小偷需要决定如何抢劫才能获得最大收益同时避免触发警报。
445

被折叠的 条评论
为什么被折叠?



