要求
示例
实现
1 class Solution {
2 private:
3 // memo[i] 表示抢劫nums[i…n)所能获得的最大收益
4 vector
5 // 考虑抢劫 nums[index…nums.size())范围内房子
6 int tryRob(vector
7
8 if(index >= nums.size())
9 return 0;
10
11 if( memo[index] != -1 )
12 return memo[index];
13
14 int res = 0 ;
15 for( int i = index ; i < nums.size() ; i ++ )
16 res = max( res, nums[i] + tryRob(nums, i + 2) );
17 memo[index] = res;
18 return res;
19 }
20 public:
21 int rob(vector
22 memo = vector
23 return tryRob(nums, 0);
24 }
25 };
动态规划
1 class Solution {
2
3 public:
4 int rob(vector
5
6 int n = nums.size();
7 if( n == 0 )
8 return 0;
9
10 // memo[i] 表示抢劫nums[i…n-1]所能获得的最大收益
11 vector
12 memo[n-1] = nums[n-1];
13 for( int i = n-2 ; i >= 0 ; i -- )
14 // memo[i]
15 for( int j = i ; j < n ; j ++ )
16 memo[i] = max( memo[i], nums[j] + (j+2 <n ? memo[j+2] : 0 ));
17
18 return memo[0];
19 }
20 };
相关
手机扫一扫
移动阅读更方便
你可能感兴趣的文章