198. House Robber
题目理解:
给出一个数组, 不能取相邻的数, 求能取的最大值
思路:
用 f[i] 记录状态, 表示后 i 个数中能取的最大值; 问题的答案是 f[n-1]      
对于 f[i] , 考虑要不要取 num[n-1-i], 分为两种情况, 如果取, 那么就不能取 num[n-1-i+1], 那么 f[i] = num[n-1-i] + f[i-2]; 若不取, 那么就是从 n-1-i+1 开始到最后取最大值, 也就是 f[i-1], 那么  f[i] = f[i-1]; 这样就能够写出状态转移方程 f[i] = max{ num[n-1-i] + f[i-2], f[i-1] }     
边界状态, f[0] = 1, f[1] = max{num[n-1], num[n-2]}, 这里自己思考一下就能明白;      
小结:
简单的动态规划题
Submission Detail:
    
code:
1  | class Solution {  |