打家劫舍
基本原理:两家必然偷一家,四家必然偷两家
也就是说,对于第i家,如果能偷就偷,限制它偷的只有第i-1家
- 198,条形的
dp[i] = max(dp[i - 2] + nums[i],/偷第i家的/dp[i - 1]/不偷第i家的/); - 213环形的
因为第一个和最后一个是不能挨着,也就是说,选了第一个就不能选最后一个。选了最后一个就是不能选第一个,所以问题可以分分解为两个子问题- [0,end-1]的条形
- [1,end]的条形
两个问题的max就是问题的解
- 337 树状的
同样的特点,决定该节点的就是偷还是不偷,因此我们定义一个二维的返回值分别代表偷或者不偷的最大受益,每次捡起最大的受益即可(感觉像是贪心了呀)