这是一道动态规划入门题
动态规划求的并不是最优解,而是最优值,就比如这道题,最后并不会输出每一步的具体做法,(当然你要记录下来也是可以的),然后动态规划其实就是遍历所有情况找最好的,因此和贪心不同,得出的结果是全局最优,复杂度也会更高。
题目:
思路:这家偷,上家就不能偷,这家不偷,上家就可以选择偷与不偷
class Solution:
def rob(self, nums: List[int]) -> int:
length = len(nums)
if length==0:
return 0
if length==1:
return nums[0]
dp = [[0,nums[0]],[nums[0],nums[1]]]
for i in range(2,length):
#状态方程,自下向上求解
dp[i%2][0] = max(dp[(i+1)%2][0], dp[(i+1)%2][1])
dp[i%2][1] = dp[(i+1)%2][0] + nums[i]
return max(max(dp))
提交结果: