題目:你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。
給定一個代表每個房屋存放金額的非負整數數組,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。
class Solution {
public:
int rob(vector<int>& nums)
{
int len = nums.size();
if(len == 0)
return 0;
if(len == 1)
return nums[0];
vector<int> dp(len); //存儲當前下標的房子目前可達到的最大利益的數組
dp[0] = nums[0];
dp[1] = dp[0] < dp[1] ? dp[1] : dp[0]; //選取只有兩個房子中較大的一個利益
for(int i = 2;i < len;++i)
{
dp[i] = max(dp[i-2]+nums[i],dp[i-1]);
}
return dp[len-1];
}
};
int main()
{
int n;
cin >> n;
vector<int> vec(n);
for(int i = 0;i < n;i++)
{
cin >> vec[i];
}
Solution s;
cout << s.rob(vec) << endl;
}