演算法思路
1.確認原問題與子問題
原問題為求解n個房間的最優解,子問題為求解前1個,2個…n-1個房間的最優解。
2.確認狀態
第i個狀態即為前i個房間能夠獲得的最大財寶(最優解)
3.確認邊界狀態的值
前1個房間的最優解,第乙個房間的財寶
前2個房間的最優解,第1,2個房間中較大的財寶
4.確定狀態轉移方程
a.選擇第i個房間:第i個房間+前i-2個房間的最優解
b.不選擇第i個房間:前i-1個房間的最優解
動態規劃狀態轉移方程
dp[i]=max(dp[i-1],dp[i-2]+nums[i]);(i>=3)對於[5 2 6 3 1 7]有:
設第i個房間的最優解為dp[i]
dp[1]=5
dp[2]=5
dp[3]=max(dp[1]+nums[3],dp[2])=max(5+6,5)=11
dp[4]=max(dp[2]+nums[4],dp[3])=max(5+3,11)=11
dp[5]=max(dp[3]+nums[5],dp[4])=max(11+1,11)=12
dp[6]=max(dp[4]+nums[6],dp[5])=max(11+7,12)=18
class
solution
if(nums.
size()
==1) vector<
int>
dp(nums.
size()
,0);
dp[0]
=nums[0]
; dp[1]
=max
(nums[0]
,nums[1]
);for(
int i=
2;isize()
;i++
)return dp[nums.
size()
-1];
//這裡的返回值是陣列中的最後乙個}}
;
LeetCode 198 打家劫舍
題目 你是乙個專業的強盜,計畫搶劫沿街的房屋。每間房都藏有一定的現金,阻止你搶劫他們的唯一的制約因素就是相鄰的房屋有保安系統連線,如果兩間相鄰的房屋在同一晚上被闖入,它會自動聯絡 給定乙個代表每個房屋的金額的非負整數列表,確定你可以在沒有提醒 的情況下搶劫的最高金額。思路 本題的大致意思就是求取乙個...
LeetCode198 打家劫舍
你是乙個專業的強盜,計畫搶劫沿街的房屋。每間房都藏有一定的現金,阻止你搶劫他們的唯一的制約因素就是相鄰的房屋有保安系統連線,如果兩間相鄰的房屋在同一晚上被闖入,它會自動聯絡 給定乙個代表每個房屋的金額的非負整數列表,確定你可以在沒有提醒 的情況下搶劫的最高金額。簡單的動態規劃問題,題目意思是計算陣列...
LeetCode198 打家劫舍
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...