動(dòng)態(tài)規(guī)劃之——打家劫舍

LeetCode198. 打家劫舍

題目描述:

你是一個(gè)專業(yè)的小偷擒权,計(jì)劃偷竊沿街的房屋逼蒙。每間房?jī)?nèi)都藏有一定的現(xiàn)金深滚,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng)游昼,如果兩間相鄰的房屋在同一晚上被小偷闖入占卧,系統(tǒng)會(huì)自動(dòng)報(bào)警遗菠。
給定一個(gè)代表每個(gè)房屋存放金額的非負(fù)整數(shù)數(shù)組,計(jì)算你在不觸動(dòng)警報(bào)裝置的情況下华蜒,能夠偷竊到的最高金額辙纬。


有兩種情況:1.你一直偷一直爽,偷到了倒數(shù)第三個(gè)房屋叭喜,當(dāng)你偷完它之后接著偷最后一個(gè)贺拣。2.一直偷到倒數(shù)第二個(gè)房屋(倒數(shù)第三個(gè)沒敢偷),這時(shí)不能偷最后一個(gè)了,因?yàn)橥迪噜彽臅?huì)報(bào)警譬涡。
狀態(tài)轉(zhuǎn)移方程:dp[i] = max(dp[i-2]+nums[i], dp[i-1])

Python代碼:

class Solution:
    def rob(self, nums):
        if len(nums) == 0:
            return 0
        if len(nums) <= 2:
            return max(nums)
        dp = [0]*len(nums)
        dp[0], dp[1] = nums[0], max(nums[0], nums[1])
        for i in range(2, len(nums)):
            dp[i] = max(dp[i-2]+nums[i], dp[i-1])
        return dp[-1]

LeetCode213. 打家劫舍Ⅱ

題目描述:

你是一個(gè)專業(yè)的小偷闪幽,計(jì)劃偷竊沿街的房屋,每間房?jī)?nèi)都藏有一定的現(xiàn)金涡匀。這個(gè)地方所有的房屋都圍成一圈盯腌,這意味著第一個(gè)房屋和最后一個(gè)房屋是緊挨著的。同時(shí)陨瘩,相鄰的房屋裝有相互連通的防盜系統(tǒng)腕够,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統(tǒng)會(huì)自動(dòng)報(bào)警舌劳。
給定一個(gè)代表每個(gè)房屋存放金額的非負(fù)整數(shù)數(shù)組帚湘,計(jì)算你在不觸動(dòng)警報(bào)裝置的情況下,能夠偷竊到的最高金額甚淡。

先上代碼:

class Solution:
    def rob(self, nums):
        if len(nums) == 0:
            return 0
        elif len(nums) <= 2:
            return max(nums)
        else:
            nums1 = nums[:-1]
            nums2 = nums[1:]
        def rob1(nums):
            dp = [nums[0], max(nums[0], nums[1])]
            for i in range(2, len(nums)):
                dp.append(max(dp[i-2]+nums[i], dp[i-1]))
            return dp[len(nums)-1]
        return max(rob1(nums1), rob1(nums2))

很簡(jiǎn)單大诸,只需比較從第一個(gè)房屋偷到倒數(shù)第二個(gè)和從第二個(gè)房屋偷到最后一個(gè)哪個(gè)錢多就行了。


LeetCode337. 打家劫舍Ⅲ

題目描述:

上次打劫完一條街道之后和一圈房屋后材诽,你又發(fā)現(xiàn)了一個(gè)新的可行竊的地區(qū)底挫。這個(gè)地區(qū)只有一個(gè)入口,稱之為“根”脸侥。 除了“根”之外建邓,每棟房子有且只有一個(gè)“父“房子與之相連。一番偵察之后睁枕,聰明的你意識(shí)到“這個(gè)地方的所有房屋的排列類似于一棵二叉樹”官边。 如果兩個(gè)直接相連的房子在同一天晚上被打劫,房屋將自動(dòng)報(bào)警外遇。
計(jì)算在不觸動(dòng)警報(bào)的情況下注簿,你一晚能夠盜取的最高金額。

示例

樹形dp問題跳仿,對(duì)于每一個(gè)節(jié)點(diǎn)诡渴,都只有選和不選兩種情況。每次考慮一棵子樹菲语,那么根只有兩種情況妄辩,選和不選。方法dp返回一個(gè)列表山上,dp[0]表示不搶當(dāng)前這個(gè)節(jié)點(diǎn),dp[1]表搶眼耀。
如果搶了,就不能搶它的左右孩子了,即cur.val+l[0]+r[0]
如果沒有搶佩憾,那么哮伟,左右孩子搶不搶都可以干花,取決于哪種情況大,即
max(l)+max(r)

Python代碼:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def dp(self , cur)  :
        if not cur :
            return [0,0]
        l = self.dp(cur.left)
        r = self.dp(cur.right)
        return [max(l)+max(r),cur.val+l[0]+r[0]]
    def rob(self, root):
        return max(self.dp(root))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末楞黄,一起剝皮案震驚了整個(gè)濱河市池凄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谅辣,老刑警劉巖修赞,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婶恼,死亡現(xiàn)場(chǎng)離奇詭異桑阶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)勾邦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蚣录,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人眷篇,你說我怎么就攤上這事萎河。” “怎么了蕉饼?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵虐杯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我昧港,道長(zhǎng)擎椰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任创肥,我火速辦了婚禮达舒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叹侄。我一直安慰自己巩搏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布趾代。 她就那樣靜靜地躺著贯底,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撒强。 梳的紋絲不亂的頭發(fā)上禽捆,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音尿褪,去河邊找鬼睦擂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛杖玲,可吹牛的內(nèi)容都是我干的顿仇。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼臼闻!你這毒婦竟也來了鸿吆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤述呐,失蹤者是張志新(化名)和其女友劉穎惩淳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乓搬,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡思犁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了进肯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片激蹲。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖江掩,靈堂內(nèi)的尸體忽然破棺而出学辱,到底是詐尸還是另有隱情,我是刑警寧澤环形,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布策泣,位于F島的核電站,受9級(jí)特大地震影響抬吟,放射性物質(zhì)發(fā)生泄漏萨咕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一拗军、第九天 我趴在偏房一處隱蔽的房頂上張望任洞。 院中可真熱鬧,春花似錦发侵、人聲如沸交掏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盅弛。三九已至,卻和暖如春叔锐,著一層夾襖步出監(jiān)牢的瞬間挪鹏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工愉烙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讨盒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓步责,卻偏偏與公主長(zhǎng)得像返顺,于是被迫代替她去往敵國(guó)和親禀苦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容