zoukankan      html  css  js  c++  java
  • [leetcode] 198. House Robber

    Easy

    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.

    Example 1:

    Input: [1,2,3,1]
    Output: 4
    Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
                 Total amount you can rob = 1 + 3 = 4.

    Example 2:

    Input: [2,7,9,3,1]
    Output: 12
    Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1).
                 Total amount you can rob = 2 + 9 + 1 = 12.

    题目大意:假如你是一个专业的劫匪,你要从相连的房子里盗取钱物,但不能同时入侵相邻房子,不然会触发警报。问最多可盗取多少钱财。

    方法:动态规划
    最后一次盗取财物的最大值与上一次盗取财物的最大值相关。定义一个数组dp用于存放当前步所得的最大值,因为不能选择相邻元素的值,所以第i步的最大值就是nums[i]+dp[i-2]和dp[i-1]里的较大者。初始化第0步为0,第1步为nums[0]。
    代码如下:
    class Solution {
    public:
        int rob(vector<int>& nums) {
            if(nums.empty())return 0;
            int n=nums.size();
            if(n==1)return nums[0];
            
            vector<int> dp(n+1,0);
            dp[0]=0,dp[1]=nums[0];
            for(int i=1;i<n;++i){
                dp[i+1]=max(nums[i]+dp[i-1],dp[i]);
            }
            return dp[n];
        }
    };
  • 相关阅读:
    2019-02-08 Python学习之Scrapy的简单了解
    2019-02-07 selenium...
    2019-02-06 单链表的整表创建及增删插
    2019-02-05 Linux的一些常用命令学习2
    2019-02-04 Linux的一些常用命令学习
    2019-02-03 线性表的顺序储存结构C语言实现
    2019-02-03 多进程和多线程的区别【】
    python 多进程
    Tftp文件传输服务器(基于UDP协议)
    多线程实现tcp聊天服务器
  • 原文地址:https://www.cnblogs.com/cff2121/p/11887435.html
Copyright © 2011-2022 走看看