两次动态规划,1-n-1一次,2-n一次
注意:dp数组要比原来数组多一位,用来记录第几次第几个,动态规划问题下标一定要搞清楚
class Solution {
public:
int rob(vector<int>& nums) {
int n=nums.size();
if(n==1||n==0) return 0;
vector<int> dp(n,0);
dp[0]=0; dp[1]=nums[0];
for(int i=2;i<n;i++) {
dp[i]=max(dp[i-1],dp[i-2]+nums[i-1]);
}
int res=dp[n-1];
dp[0]=0; dp[1]=nums[1];
for(int i=2;i<n;i++) {
dp[i]=max(dp[i-1],dp[i-2]+nums[i]);
}
return max(res,dp[n-1]);
};