Exemple #1
0
pair<int,int> robHelper(TreeNode* root) {
    if(root==NULL) {
        return make_pair(0,0);
    }
    pair<int,int> left = robHelper(root->left);
    pair<int,int> right = robHelper(root->right);
    
    int first = left.second+right.second+root->val;
    int second = max(left.first, left.second) + max(right.first, right.second);
    return make_pair(first, second);
} 
Exemple #2
0
 int rob(vector<int>& nums) {
   if (nums.size() == 0) {
     return 0;
   }
   if (nums.size() == 1) {
     return nums[0];
   }
   return max(robHelper(nums, 0, nums.size() - 1), // [first, last)
     robHelper(nums, 1, nums.size())); // [second, last + 1)
     
 }
Exemple #3
0
int robHelper(int* nums, int numsSize,int start){
	if(nums==NULL||numsSize<1||numsSize<=start){
    	return 0;
	}
	if(result[start]!=-1){
		return result[start];
	}
	int res1=robHelper(nums,numsSize,start+2);
	int res2=robHelper(nums,numsSize,start+3);
	int res=nums[start]+max(res1,res2)
	result[start]=res;
	return ;
}
Exemple #4
0
int rob(int* nums, int numsSize) {  
	if(nums==NULL||numsSize<1){
		return 0;
	}
	result=(int *)malloc(numsSize*sizeof(int));
	if(result==NULL){
		exit(EXIT_FAILURE);
	} 
	memset(result,-1,numsSize*sizeof(int));//初始化为-1
	int fristElementMax=robHelper(nums,numsSize,0);//第一个元素被盗后产生的最大值 
	int secondElementMax=robHelper(nums,numsSize,1);//第二个元素被盗后可能产生的最大值 
	return fristElementMax>secondElementMax?fristElementMax:secondElementMax;
}
Exemple #5
0
vector<int> robHelper(TreeNode* root) {
	if(root == NULL) {
		return vector<int>(2,0);
	}

	vector<int> left = robHelper(root->left);
	vector<int> right = robHelper(root->right);

	vector<int> res;
	// res[0] : pick up root
	res.push_back(left[1] + right[1] + root->val);
	// res[1] : no root obviously
	res.push_back(max(left[0],left[1]) + max(right[0],right[1]));
	return res;

} 
Exemple #6
0
int rob(TreeNode* root) {
    pair<int,int> p=robHelper(root);
    return max(p.first,p.second);
}
Exemple #7
0
   int rob(TreeNode* root) {
	
	vector<int> dp = robHelper(root);
	return max(dp[0], dp[1]);
}
 int rob(vector<int>& nums) {
     if(nums.size() == 0) return 0;
     if(nums.size() == 1) return nums[0];
     int n = nums.size();
     return max(robHelper(nums,0,n-2),robHelper(nums,1,n-1));
 }