Accepted Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
int rob(vector<int>& nums) {
int n=nums.size();
if(n==1) return nums[0];

// dp[i] = max(dp[i-1], dp[i-2]+nums[i])
// 1: dp[i-1] 表示強盜不搶當前房屋,但確定是他會搶前i-1那間房屋
// 2: dp[i-2]+nums[i] 表示搶劫當前房屋+ 掠奪之前房屋的物品
int dp[1000];
dp[0]=nums[0];
dp[1]=max(nums[0],nums[1]);
for(int i=2;i<n;i++) {
dp[i]=max(dp[i-1],dp[i-2]+nums[i]);
}
return dp[n-1];
}
};