题目描述: 打家劫舍
你是一个专业的强盗,计划抢劫沿街的房屋。每间房都藏有一定的现金,阻止你抢劫他们的唯一的制约因素就是相邻的房屋有保安系统连接,如果两间相邻的房屋在同一晚上被闯入,它会自动联系警方。
给定一个代表每个房屋的金额的非负整数列表,确定你可以在没有提醒警方的情况下抢劫的最高金额。
解题思路:
动态规划:状态方程:ans[i]表示从第0家偷到第i家时能获得的最高金额
ans[i] = max(ans[i-1], ans[i-2]+nums[i]);
代码:
class Solution {
public:
int rob(vector<int>& nums) {
if(nums.size() == 0) return 0;
if(nums.size() == 1) return nums[0];
int ans[nums.size()];
ans[0] = nums[0];
ans[1] = max(ans[0], nums[1]);
for(int i = 2 ; i < nums.size() ; i ++) {
ans[i] = max(ans[i-1], ans[i-2]+nums[i]);
}
return ans[nums.size()-1];
}
};