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