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です。

lock icon提出時に隠しテスト+16件

challenge icon

発展問題

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

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

ケース1

ケース2

ケース3

入力

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

期待値

16