https://leetcode.com/problems/house-robber/
max_sum[N]: 在被抢夺的房子不能连续的条件下,抢前N个房子能达到的最大收益。
V[N] : 第N个房子的价值。
对抢前N个房子的结果,有两种可能: 第N个房子被抢;或第N个房子不被抢。
递推式:
max_sum[N] = max{ max_sum[N-2] + V[N], max_sum[N-1] }
参考实现
int rob(int* nums, int numsSize) {
int i = 0;
int max_sum[3] = {0, 0, 0};
for (i = 0; i < numsSize; i++) {
if ( i == 0) {
max_sum[0] = nums[0];
max_sum[2] = max_sum[0];
continue;
} else if (i == 1) {
max_sum[0] = nums[0];
max_sum[1] = nums[1] > nums[0] ? nums[1]:nums[0];
max_sum[2] = max_sum[1];
continue;
}
if (nums[i] + max_sum[0] > max_sum[1]) {
max_sum[2] = nums[i] + max_sum[0];
} else {
max_sum[2] = max_sum[1];
}
max_sum[0] = max_sum[1];
max_sum[1] = max_sum[2];
}
return max_sum[2];
}