打家劫舍 C语言

  • 典型动态规划问题:f(k) = max( f(k-1), f(k-2)+n(k) )
  • 错误
    当时没有考虑到第0个和第1个的选取问题
int max(int a, int b){
     
    if(a<b)
        return b;
    else
        return a;
}
int rob(int* nums, int numsSize){
     
    if(numsSize==0)
        return 0;
    if(numsSize==1)
        return nums[0];
    if(numsSize==2){
     
        if(nums[0]>nums[1])
            return nums[0];
        else
            return nums[1];
    }
    int sum[numsSize];
    sum[0] = nums[0];
    sum[1] = nums[1];
    if(nums[0]>nums[1])
        sum[1] = nums[0];
    for(int i=2; i<numsSize; i++){
     
        sum[i] = max(nums[i]+sum[i-2], sum[i-1]);
    }
    return sum[numsSize-1];
}

你可能感兴趣的:(打家劫舍 C语言)