Use el subproblema de programación dinámica
: para las primeras i casas, la cantidad máxima que se puede robar es f (i) el
límite es f (1) = a [0]
f (2) = max (a [0], a [1] )
Ecuación de transferencia de estado: f (n) = max (f (n-2) + a (n), f (n-1)), donde a es una lista que representa la cantidad de efectivo en cada casa, n> = 3
class Solution:
def rob(self, nums: List[int]) -> int:
if nums == []:
return 0
length = len(nums)
if length == 1:
return nums[0]
elif length == 2:
return max(nums)
res = 0
l_2 = nums[0]
l_1 = max(nums[0],nums[1])
for i in range(length - 2):
tempindex = i + 2
res = max(l_2+nums[tempindex],l_1)
l_2 = l_1
l_1 = res
return res