【leedcode】198. House Robber

来源:互联网 发布:淘宝网用户体验报告 编辑:程序博客网 时间:2024/06/01 08:32
题目:

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.

分析:用动态规划的方法来算。设f(n)为以第n位为结尾的数组的所有抢劫方案中获利最大的方案。则,f(n) = max(f(n-1),f(n-2) + [n])。由此关系即可得到答案、

代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int all[50000];
int Themax(int n, vector<int>& nums) {
if (n == 1) return all[1];
if (n == 0) return all[0];
int t1, t2;
if (all[n - 1] != 0) t1 = all[n - 1];
else {
t1 = Themax(n - 1,nums);
}
if (all[n - 2] != 0) t2 = all[n - 2];
else {
t2 = Themax(n - 2, nums);
}
int res;
res = max(t1, t2 + nums[n]);
all[n] = res;
return res;


}
class Solution {
public:
int rob(vector<int>& nums) {
memset(all, 0, 50000);
if (nums.empty()) return 0;
all[1] = max(nums[0], nums[1]);
all[0] = nums[0];
return Themax(nums.size() - 1, nums);
}
};

原创粉丝点击