题目链接:LeeCode198打家劫舍
题目描述:
经典动态规划,房屋数在3以内时,所获得的最大利益一定是nums[0]+nums[2]或nums[1],而nums[3]时能获得的最大利益一定是nums[0]时获得的最大利益加本身或者nums[1]时获得的最大利益加本身,因为小偷肯定一次跑2步或者跑3步,跑4步会变成两个2步会漏掉中间的。
状态转移方程:dp[i]=Math.max(dp[i-2],dp[i-3])+nums[i];
class Solution {
public static int rob(int[] nums) {
if(nums.length==0)return 0;
if(nums.length==1)return nums[0];
if(nums.length==2)return nums[0]>nums[1]?nums[0]:nums[1];
int[] dp=new int[nums.length];
dp[0]=nums[0];
dp[1]=nums[1];
dp[2]=nums[0]+nums[2];
for (int i = 3; i < nums.length; i++) {
dp[i]= Math.max(dp[i-3],dp[i-2])+nums[i];
}
return dp[nums.length-1]>dp[nums.length-2]?dp[nums.length-1]:dp[nums.length-2];
}
}