Re: [閒聊] 每日LeetCode

作者: Rushia (みけねこ的鼻屎)   2022-12-14 10:08:15
198. House Robber
龍大是一個小偷,他跑到一條街上要偷一整排的家戶,但是家戶裝有警報系統所以
你如果偷了這個家他的左右兩邊的家都會知道,求出龍大要怎麼偷才能偷最多錢。
Example:
Input: nums = [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.
思路:
1.因為偷了i位置就不能偷i-1位置,所以我們只要紀錄不偷前一家和偷前一家哪一個
可以拿到更多錢就好,可以使用動態規劃來維護這個數值。
2.dp(i)表示在第i個家的時候可偷到的最多錢,狀態轉移方程:
dp(i) = max(dp(i-1), dp(i-2)+nums(i))
3.因為狀態轉移方程要往前找兩個,所以我們必須初始化dp(0)和dp(1)的數值,顯然的
dp(0)一定是nums[0],而dp[1]會是max(nums[0], nums[1]),遇到長度小於2的case
則直接返回唯一的元素。
Java Code:
作者: pandix (麵包屌)   2022-12-14 10:13:00
大師
作者: SecondRun (雨夜琴聲)   2022-12-14 10:16:00
好難
作者: wwndbk (黑人問號)   2022-12-14 10:16:00
大師
作者: ririoshi (角落住民)   2022-12-14 10:29:00
大師
作者: twosheep0603 (兩羊)   2022-12-14 11:56:00
這題DP還滿直覺的

Links booklink

Contact Us: admin [ a t ] ucptt.com