zoukankan      html  css  js  c++  java
  • 强盗抢房子

    题目:给一个数组,求每个元素相加的最大和,但相邻元素不能相加,比如[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
Copyright © 2011-2022 走看看