打家劫舍

定义状态
- 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;
}
}
本文介绍了一种解决“打家劫舍”问题的方法,通过动态规划算法找到偷窃的最大金额。定义状态 money[i] 表示到第 i 间房屋为止能偷到的最大金额,并通过状态转移方程实现最优解。
1043

被折叠的 条评论
为什么被折叠?



