198. House Robber
动态规划,小偷有两种选择:
1.偷最后一个房子,则倒数第二个房子不能再偷
2.不偷最后一个房子
所以问题可以简化为r[i]=max{r[i-1],r[i-2]+i}
1 class Solution { 2 public: 3 int rob(vector<int>& nums) { 4 int n = nums.size(); 5 if (n == 0) 6 return 0; 7 else if (n == 1) 8 return nums[0]; 9 else if (n == 2) 10 return max(nums[0], nums[1]); 11 else 12 { 13 int*sum = new int[n]; 14 sum[0] = nums[0]; 15 sum[1] = max(nums[0], nums[1]); 16 for (int i = 2; i < n; i++) 17 sum[i] = max(sum[i - 1], sum[i - 2] + nums[i]); 18 return sum[n - 1]; 19 } 20 } 21 };


浙公网安备 33010602011771号