Problem#
給你一個整數陣列 M[i]
代表 第 $i$ 間房子的價值,你今天是小偷要去偷錢,但是有個限制是不能連續偷(偷第 $i$ 間,第 $i-1$ 和 $i+1$ 都不能偷),否則會被抓到,問你最大能偷多少?
想法#
對於 $1$ 到 $i$ 能偷的總價值,假如你挑了第 $i$ 間房子,那一定是和第 $i-2$ 間的房子加總起來($W[i]+W[i-2]$);如果不挑 $i$ 那必定是 $i-1$ ($W[i-1]$),而要求兩者最大,所以取 max
1 | W[1...3] = |
從左建到右(bottom-up),保證後面(dp[i])的一定是最大的,因為左邊的 dp[i-1] 或是 dp[i-2] 也已經是最大的
- 時間複雜度: $\mathcal{O}(n)$
- 空間複雜度: $\mathcal{O}(n)$
AC Code#
- Buttom up
- Top down