Menu
CoddyTech

House Robber

ふつう動的計画法python iconjava iconcpp iconc iconjs icon+10

家々が通り沿いに一列に並んでおり、nums[i]は家iにあるお金です。好きな家からお金を取れますが、隣り合う2軒の家から取ることはできません。取れる金額の合計の最大値を返してください。

関数

rob(nums: integer-array) → integer
numsinteger-array
通り順に並べた各家の金額
戻り値integer
隣り合う2軒の家から取らずに持ち出せる最大の合計

制約

  • 1 ≤ nums.length ≤ 104
  • 0 ≤ nums[i] ≤ 1000
  • 答えは最大でも 5 × 106 なので、符号付き32ビット整数に収まります。

例

入力
nums = [5, 3, 4, 11, 2]
出力
16
説明
0番と3番の家から5と11を選び、合計16にします。連続して2軒飛ばすこともでき、ここでは他のどの方法よりも優れています。5 + 4 + 2 = 11、そして3 + 11 = 14です。
challenge icon

発展問題

取得する家と合計の両方を返します。そのリストを再構築するには、テーブルから何を保持する必要がありますか。また、2つの累計だけでそれを実現できますか?

コードをリセット
def rob(nums):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

nums = [5, 3, 4, 11, 2]

期待される出力

16