题目:
给定一个数组nums,代表每家可以打劫到的钱数,连着打劫相邻的两家会自动报警。在保证不报警的前提下,找到可以打劫到的最多钱数。
解题思路:
考虑使用动态规划。dp[i]表示从0-i户可以打劫到的最大钱数。则有dp[i] = max(dp[i-1],dp[i-2]+nums[i])。
代码(Python):
class Solution(object):
def rob(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if nums==[]:
return 0
if len(nums)==1:
return max(nums)
dp = [0]*len(nums)
dp[0] = nums[0]
dp[1] = max(nums[1],nums[0])
for i in range(2,len(nums)):
dp[i] = max(dp[i-1],dp[i-2]+nums[i])
return dp[len(nums)-1]
本文探讨了一个经典的动态规划问题——打家劫舍。该问题要求在不连续抢劫相邻房屋的情况下,求出能获得的最大金额。通过定义状态转移方程dp[i]=max(dp[i-1], dp[i-2]+nums[i])来解决问题。

2514

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



