# 階段變數: k表示已經嘗試偷竊了k個房間 0 <= k <= k-1
# 狀態變數: xk表示k階段可以選擇的房間
# 決策: uk=1,0表示k階段是否能選擇第k個房間
# 最優指標函式: fx(xk)表示前k個房間偷竊最高金額
# 狀態轉移方程: xk-1 = xk - uk - 1
# 規劃方程: fk(xk)=max|uk=0,1 max
# 邊界: f0(0) = v[0] f1(xk)=max
f = lambda: map(int, input().split())
v = list(f())
k = len(v)
dp = [0 for i in range(k)]
# print(dp)
if k == 0:
print(0)
exit(0)
dp[0] = v[0]
if 1 < k:
dp[1] = max(v[0], v[1])
for k in range(2, k):
dp[k] = max(dp[k - 1], dp[k - 2] + v[k])
print(dp[k - 1])
leetcode 動態規劃 打家劫舍
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...
LeetCode 動態規劃 打家劫舍
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 輸入 1,2...
leetcode 打家劫舍(動態規劃)
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...