1. 程式人生 > >198. House Robber(動態規劃--房屋強盜)

198. House Robber(動態規劃--房屋強盜)

題目

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.

題意

你是一個專業的強盜,你計劃在一條路上搶劫房屋。每一個房屋藏著一些錢。因為相鄰房屋之間有安全系統相連,這個安全系統又與警察相連,所以你不能搶劫相鄰的房屋在同一個晚上。
給你一列非負整數代表每一個房屋的藏的錢數,求出在沒有驚擾警察的情況下,能搶劫到的最多的錢數。

題解

不能取相鄰元素,動態規劃的思想是將大問題轉換為逐個的小問題。

假設:

1. 只有1個房屋nums[0],最大收益為dp[0] = nums[0];
2. 有2個房屋nums[0], nums[1], 不能同時取,最大收益為dp[1] = max(nums[0], nums[1]);
3. 有3個房屋,有兩種取法,取nums[1],或者取nums[0]和nums[2].即 dp[2] = max(nums[1], nums[0] + nums[2]);
4. 故可推測出動態轉換方程為:dp[i] = max(nums[i] + dp[i-2], dp[i-1]);

C++程式碼

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

        dp[0] = nums[0];
        dp[1] = max(nums[0], nums[1]);
        for(int i=2; i<len; i++)
        {
            dp[i] = max(nums[i] + dp[i-2], dp[i-1]);
        }
        return dp[len-1];
    }
};

python程式碼

class Solution(object):
    def rob(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n =  len(nums);
        dp = [0 for x in range(n)];
        if n==0:
            return 0
        if n==1:
            return nums[0]
        if n==2:
            return max(nums[0], nums[1])
        dp[0] = nums[0]
        dp[1] = max(nums[0], nums[1])
        for i in range(2, n):
            dp[i] = max(nums[i] + dp[i-2], dp[i-1])
        return dp[n-1]

相關推薦

198. House Robber(動態規劃--房屋強盜

題目 You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only

LeetCode:198. House Robber(房子搶劫問題

     You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only co

動態規劃Leetcode 198 House Robber

Leetcode 198 House Robber Problem Description: 偷東西:不能偷相鄰房子的東西,不然會觸發報警。要求在不被抓的前提下偷到東西的價值最大。 具體的題目資訊: https://leetcode.com/problems/hou

leetcode 198.House Robber-打家劫舍|動態規劃

【思路-Java、Python】遞迴實現 考查動態規劃,基本思路是當前節點處最大值curMax = Math.max(curMax, curPrePreMax + cur)。舉個例子[3, 2,

LeetCode 198. House Robber (房屋搶劫)

原題 You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint st

【LeetCode-面試演算法經典-Java實現】【198-House Robber(搶劫犯

原題   You are a professional robber planning to rob houses along a street. Each house h

LeetCode 198. House Robber(小偷遊戲

You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constr

leetcode 198 打家劫舍 (一維動態規劃、基礎

題目:你是一個職業盜賊,鎖定了一條大街準備今晚作案,街上每棟房子裡都有固定量的財務。但是相鄰的房子之間有報警器,一旦兩個相鄰的房子在同一晚被盜,就會觸發報警器。現已知一系列非負整數表示每個房子裡的財務數目,請計算在不觸發報警器的情況下,你今晚可以盜取的最大值。思路:因為我可以

198. House Robber 強盜搶劫 Java

tps pre nbsp most style ava span lee discus 網址:https://leetcode.com/problems/house-robber/ 參考:https://leetcode.com/problems/house-robber

198. House Robber

mine urn con sent use constrain clas imu ping You are a professional robber planning to rob houses along a street. Each house has a certa

9.9遞歸和動態規劃(九——N皇後

其它 ace req case create lac any urn distance /** * 功能:打印八皇後在8*8棋盤上的各種擺法。當中每一個皇後都不同行、不同列,也不在對角線上。 * 這裏的“對角線”指的是全部的對角線,不僅僅是平分整個棋盤的那兩

8.動態規劃(1——字符串的編輯距離

有一個 delete 算法導論 根據 algo img void stat pre   動態規劃的算法題往往都是各大公司筆試題的常客。在不少算法類的微信公眾號中,關於“動態規劃”的文章屢見不鮮,都在試圖用最淺顯易懂的文字來描述講解動態規劃,甚至有的用

9.9遞歸和動態規劃(六——打印n對括號的所有有效組合(即左右括號正確配對

思路 即使 情況 else 字符 ram 配對 字符串 pop /** * 功能:打印n對括號的所有有效組合(即左右括號正確配對)。 */ 兩種方法: 方法一: /** * 思路:在括號的最前面或者原有的每對括號中面插入一對括號。至於其它

動態規劃(DP

first 個數 目的 進入 right 返回值 ase lines cal 在學習動態規劃前 , 先補充些有關遞歸的知識 。      所謂的遞歸函數 就是調用自身函數的過程 ,因此是用棧來存儲的 。   遞歸函數的最終返回值 就是第一次調用函數的返回值 。   在寫

動態三角形(動態規劃思想入門

star ber name 做到 tar triangle 解決 算法 log 個人心得:動態規劃是一種隸屬於決策學的一個算法思想,他能夠很好的解決多階段決策問題,這種思想對於我們的生活還是科研都是必不可少的, 需要好生體會,學會動態方程的轉移,做到具體問題具體分析。 那這

【BZOJ3992】序列統計(動態規劃,NTT

swap int 乘法 true ble spa main 們的 oid 【BZOJ3992】序列統計(動態規劃,NTT) 題面 BZOJ 題解 最裸的暴力 設\(f[i][j]\)表示前\(i\)個數,積在膜意義下是\(j\)的方案數 轉移的話,每次枚舉一個數,直接丟進去

【easy】198. House Robber

tro pos color and 很好 二叉樹 house vector ++ 題目一: 一個極其簡單的動態規劃。 class Solution { public: int rob(vector<int>& nums) { i

ALGO-13 攔截導彈(動態規劃(貪心

gpo namespace cst 雷達 高度 lan 一個 int post 問題描述   某國為了防禦敵國的導彈襲擊,發展出一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到

矩陣連乘問題(動態規劃算法

traceback 關於 fin cin AI png 個數 end http 問題描述: 具體可參考:https://blog.csdn.net/liufeng_king/article/details/8497607 代碼如下: #ifndef MATRI

動態規劃(其一

重點 序列 href 如何 本質 相同 影響 好處 每次 作者:王猛鏈接:https://www.zhihu.com/question/23995189/answer/35429905來源:知乎著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。 動態規劃