House Robber
(1) 先从 Top-Down 的角度来想,如果我们定义 maxProfit(n) 为长度为 n 的 array 中所能得到的最大利益的话,不难看出在计算 maxProfit(n) 的时候,它的值只和前两个 subproblem 相关,即 maxProfit(n - 1) 和 maxProfit(n - 2). 关键是找到这个!!
由此我们发现了 DP 的第一个性质: overlap subproblems.(即states)
(2)optimal substructure相当于transition function。同时如果 maxProfit(n - 1) 和 maxProfit(n - 2) 都是其对应子问题的最优解的话,我们可以只利用这两个子问题的 solution,加上对当前元素的判断,构造出 maxProfit(n) 的最优解。
因此我们满足了 DP 的正确性性质: optimal substructure. (即states之间的关联)
(3) 空间的优化: index % n因为每一个 size = index 的问题只和前面的 n 个子问题相关,只用存储n个状态即可。
(4) 为什么要有初始定义?因为不满足递推公式,带入会出现溢出