四个步骤
1, 设计暴力算法, 找到冗余
2, 设计并存储状态(使用一维, 二维数组)
3, 递归式(状态转移方程)
4, 自底向上计算最优解(编程方式)
public class Main {
public int rob(int[] nums) {
if(nums.length == 0) return 0;
int[] f = new int[nums.length + 1];
f[0] = 0; // 表示当前没有人可以偷, 为0
f[1] = nums[0]; // 当前只有一个人, 只能偷他的
for(int i=2; i<=nums.length; ++i) {
f[i] = Math.max(nums[i-1] + f[i-2], f[i-1]);
}
return f[nums.length];
}
}