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 };

 

posted @ 2016-11-21 19:28  Initial_Dream  阅读(117)  评论(0)    收藏  举报