打家劫舍
定义状态
- money[i]:到nums[i]为止的偷盗的最大值
- maxMoney:偷盗的最大金额
初始化状态
- money[i] = nums[i]:对应每个房屋的金额
- maxMoney:nums.length>=2,Math.max(money[0], money[1])
状态转移
i < j-1,当money[i] + nums[j] > money[j]时,money[j] = money[i] + nums[j],即遍历0~j-2取以nums[i]结尾的序列偷盗的最大值。maxMoney = Math.max(maxMoney, money[j])。
class Solution {
public int rob(int[] nums) {
int n = nums.length;
if (n == 0) {
return 0;
}
if (n == 1) {
return nums[0];
}
int[] money = new int[n];
money[0]=nums[0];money[1]=nums[1];
int maxMoney = Math.max(money[0], money[1]);
for (int j = 2; j < n; j++) {
money[j] = nums[j];
for (int i = 0; i < j-1; i++){
if (money[i] + nums[j] > money[j]){
money[j] = money[i] + nums[j];
maxMoney = Math.max(maxMoney, money[j]);
}
}
}
return maxMoney;
}
}