题目:给一个数组,求每个元素相加的最大和,但相邻元素不能相加,比如[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]; }