-
Notifications
You must be signed in to change notification settings - Fork 95
/
Copy pathhouse-robber-ii.cpp
35 lines (29 loc) · 1.18 KB
/
house-robber-ii.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
public:
int rob(vector<int>& nums) {
size_t nums_size = nums.size();
if (nums_size < 2) {
return nums.empty() ? 0 : nums[0];
}
vector<vector<int> > dp_with0(nums_size, vector<int>(2, 0));
vector<vector<int> > dp_without0(nums_size, vector<int>(2, 0));
dp_with0[0][1] = nums[0];
for (int32_t i = 1; i < nums_size; ++i) {
dp_with0[i][0] = max(dp_with0[i-1][0], dp_with0[i-1][1]);
dp_with0[i][1] = nums[i]
+ max(dp_with0[i-1][0],
i - 2 >= 0 ?
max(dp_with0[i-2][0], dp_with0[i-2][1]) : 0);
dp_without0[i][0] = max(dp_without0[i-1][0], dp_without0[i-1][1]);
dp_without0[i][1] = nums[i]
+ max(dp_without0[i-1][0],
i - 2 >= 0 ?
max(dp_without0[i-2][0], dp_without0[i-2][1]) : 0);
}
int res = max(
max(dp_with0[nums_size-2][0], dp_with0[nums_size-2][1]),
max(dp_without0[nums_size-1][0],
dp_without0[nums_size-1][1]));
return res;
}
};