两次动态规划,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]);
};
转载请注明原文地址:https://ipadbbs.8miu.com/read-41245.html