题目:
算法思想: 这道题明显看出来是动态规划,因为可以通过构建子问题来达到最优。分析一下,只有一间房那么最大的就是1号房的金额,如果有两间房,那么只能选择其中最大的一个。从三间房以后,当前n号房的最大金额是max(n-2号房的钱+n号房的钱,n-1号房的钱)。用pre变量维护n-2号房,cur维护n-1号房。
代码:
int rob(vector<int>& nums) {
int cur = 0;
int pre = 0;
for(int i = 0;i < nums.size();i++)
{
int tmp = cur;
cur = max(pre+nums[i],cur);
pre = tmp;
}
return cur;
}