class Solution:
def rob(self, nums: List[int]) -> int:
#两个动态方程 比较:(1,n-1)的最大和, (2,n)最大和,
if len(nums) == 0:
return 0
if len(nums) == 1:
return nums[0]
dp1 = [0] * (len(nums) + 1)
dp2 = [0] * (len(nums) + 1)
dp1[1] = nums[0]
for i in range(2, len(nums)):
#对于每一个房子,要么偷,要么不偷。偷的话应该是dp[i-2]+nums[i-1],不偷是dp[i-1]
dp1[i] = max(dp1[i-1], dp1[i-2]+nums[i-1])
dp2[2] = nums[1]
for i in range(3, len(nums)+1):
dp2[i] = max(dp2[i-1], dp2[i-2]+nums[i-1])
return max(max(dp1), max(dp2))