强盗抢房子

题目:给一个数组,求每个元素相加的最大和,但相邻元素不能相加,比如[4,1,1,4],第一个和最后一个相加为8,[4,1,1,1,4],选第一个,第三个,第五个最大和为9。。。

思路:dp[i]只依赖dp[i-1]和dp[i-2],假设有三个数【1,2,4】,dp[0]=1,dp[1]=2(dp[1]>dp[0]) dp[2]=5(dp[0]+a[2]>dp[1]),所以可得递推公式dp[i]=max(dp[i-2]+a[i],dp[i-1]);

 public int rob(int[] nums) {
      int n = nums.length;
        if(n == 0) return 0;
        if(n ==1) return nums[0];
        int[] dp = new int[n];
        dp[0] = nums[0];
        dp[1] = Math.max(dp[0],nums[1]);
       for(int i = 2; i<n;i++){
            dp[i] = Math.max(dp[i-2]+nums[i], dp[i-1]);
        }
        return dp[n-1];
    }
原文地址:https://www.cnblogs.com/team42/p/6747927.html