题目描述
房屋围成一圈,即第一个房屋和最后一个房屋是紧挨着。不能偷相邻的房屋。
金额数组,求最高偷窃的金额。
分析
参考:https://leetcode-cn.com/problems/house-robber-ii/solution/213-da-jia-jie-she-iidong-tai-gui-hua-jie-gou-hua-/
环状排列意味着第一个房子和最后一个房子只能选择一个偷窃,(也可以都不偷,但因为金额都是非负数,这种情况肯定不是最优解)。因此可以把环状排列房间问题约化为两个单排排列房间 子问题:
1. 在不偷窃第一个房间的情况下(即nums[1 :]),最大金额是 p1
2. 在不偷窃最后一个房间的情况下(即nums[: n - 1]),最大金额是p2
**综合偷窃最大金额:**max(p1, p2)。
解题思路
-
状态定义:
- 设动态规划列表 dp,dp[i] 代表前 i 个房子在满足条件下能偷取到的最高金额。
-
转移方程:
- 设:有 n 个房子,前 n 间能偷窃到的最高金额是 dp[n],前 n - 1 间能偷窃到的最高金额是 dp[n - 1],此时向这些房子后加一间房,此房间价值为 num;
- 加一间房后:由于不能抢相邻的房子,意味着抢第 n + 1 间就不能抢第 n 间;那么前 n + 1