int rob(vector<int> &nums) {
     int n = nums.size();
     switch (n) {
         case 0:
             return 0;
         case 1:
             return num[0];
         case 2:
             return max(num[0], num[1]);
         default:
             int m1 = orginal_rob(nums, 0, n-1);
             int m2 = orginal_rob(nums, 1, n);
             return max(m1, m2);
     }

}
Example #2
0
 int rob(vector<int>& nums) {
     int n = nums.size();
     switch (n) {
         case 0:
             return 0;
         case 1:
             return nums[0];
         case 2:
             return max(nums[0], nums[1]);
         default:
             /*
              * the idea is we cannot rob[0] and rob[n-1] at same time
              * so, we rob [0 .. n-2] or [1 .. n-1], can return the maxinum one.
              */
             int m1 = orginal_rob(nums, 0, n-1);
             int m2 = orginal_rob(nums, 1, n);
             
             return max(m1, m2);
     }
 }