假設你是乙個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是:相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。
給定乙個非負整數列表,表示每個房子中存放的錢, 算一算,如果今晚去打劫,你最多可以得到多少錢 在不觸動報警裝置的情況下。
樣例
給定[3,8, 4]
, 返回8
.
挑戰
o(n) 時間複雜度 且 o(1) 儲存。
解題思路:假設你來到乙個房子面前,你有兩種選擇:打劫或者放棄。如果打劫,那麼此時的打劫金額等於從第乙個房子至上上乙個房子打劫所獲得的金額加上打劫該房子獲得的金額。如果放棄,此時的金額依舊等從第乙個房子到上乙個房子打劫所獲的金額。
動態規劃:f[n]=max(f[n-1],f[n-2]+money[n]);
n表示第n個房子,n-1表示上乙個房子,n-2表示上上乙個房子。
f[n]表示打劫前n個房子所獲得的最大金額。
typedef long long long;
class solution
return cur;
}};
或者寫成這樣更加直觀
typedef long long long;
class solution {
public:
long long houserobber(vector&a) {
int n;
if((n=a.size())==0)
return 0;
if(1==n)
return a[0];
long dp[n];
dp[0]=a[0];
dp[1]=max(a[0],a[1]);
for(int i=2;i
LintCode 打劫房屋
描述 假設你是乙個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定乙個非負整數列表,表示每個房子中存放的錢,算一算,如果今晚去打劫,你最多可以得到多少錢 在不觸動報警...
lintcode打劫房屋
原題位址 題目 假設你是乙個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定乙個非負整數列表,表示每個房子中存放的錢,算一算,如果今晚去打劫,你最多可以得到多少錢 在...
LintCode 打劫房屋
假設你是乙個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定乙個非負整數列表,表示每個房子中存放的錢,算一算,如果今晚去打劫,你最多可以得到多少錢 在不觸動報警裝置的...