动态规划入门级教程(leetcode) 198.House Robber

来源:互联网 发布:软件开发投标文件 编辑:程序博客网 时间:2024/05/29 05:01

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.

Credits:
Special thanks to @ifanchu for adding this problem and creating all test cases. Also thanks to @ts for adding additional test cases.

不知道以前写过没有这次放在专题里分析

举个例子【7,1,2,4,9】

dp[0]=7

dp[1]=7,这里我们会认为是dp[i]=max(dp[i-1].nums[i]}这个时候还是不正确的我们分析下一个

dp[2]=9(7+2)所以推出dp[i]=max(dp[i-1],nume[i]+dp[i-1])这个时候还是不正确的我们要结合题目意思写再分析下一个

dp[3]=13(7+4)dp[i]=max(dp[i-1],numi[i]+dp[i-1])

dp[4]=7+2+9dp[i]=max(dp[i-1],numi[i]+dp[i-2])这里是正确的原因是我们不能连续抢

class Solution {public:    int rob(vector<int>& nums) {        if(nums.size()==0)        {            return NULL;        }        if(nums.size()==1)        {            return nums[0];        }        if(nums.size()==2)        {            return max(nums[0],nums[1]);        }        int dp[nums.size()];        for(int i=0;i<nums.size();i++)        {            dp[i]=0;        }        dp[0]=nums[0];        for(int i=1;i<nums.size();i++)        {            if(i==1)dp[1]=max(dp[0],nums[1]);            else            {                dp[i]=max(dp[i-1],dp[i-2]+nums[i]);            }        }        return dp[nums.size()-1];    }};

阅读全文
0 0
原创粉丝点击