解题思路:
采用动态规划,设有n栋房子,编号0,1,... ,n-1. nums[i],表示第i栋房子的存钱数目,数组money[n],moeny[i]表示从第0栋房子到第i栋房子,抢劫者可以抢到的最大钱数。则:
当 i = 0,money[i] = nums[0];
当 i = 1,money[i] = max(nums[0], nums[1]);
当 i > 1, money[i] = max(money[i - 2] + nums[i], money[i - 1]);
原题目:
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
以下为C++代码, AC,菜鸟一个,请大家多多指正
class Solution {
public:
int rob(vector<int>& nums) {
int houseMount = nums.size();
if (houseMount == 0) {
return 0;
}
vector<int> money(houseMount, 0);
for (int i = 0; i < houseMount; i++) {
if (i == 0) {
money[i] = nums[0];
}
else if (i == 1) {
money[i] = max(nums[0], nums[1]);
}
else {
money[i] = max(money[i - 2] + nums[i], money[i - 1]);
}
}
return money[houseMount - 1];
}
};