在上次打劫完一條街道之後,竊賊又發現了乙個新的可以打劫的地方,但這次所有的房子圍成了乙個圈,這就意味著第一間房子和最後一間房子是挨著的。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是:相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。
給定乙個非負整數列表,表示每個房子中存放的錢, 算一算,如果今晚去打劫,你最多可以得到多少錢 在不觸動報警裝置的情況下。
樣例給出nums =[3,6,4]
, 返回6
, 你不能打劫3
和4
所在的房間,因為它們圍成乙個圈,是相鄰的.
解題思路:和這個差不多,一樣是動態規劃。只不過圈起來了。
僅對最後一所房子進行討論,
如果不打劫,和前一篇文章一樣,此時結果為r1 = dp[nums.length - 1][0];
如果打劫,則意味著第一所房子不能打劫,即dp[0][0] = dp[0][1] = 0,這樣重來一次動態規劃,此時的結果為 r2 = dp[nums.length-1][1];
最終結果為max(r1, r2).
**:public class solution {
/*** @param nums: an array of non-negative integers.
* return: the maximum amount of money you can rob tonight
*/public int houserobber2(int nums) {
// write your code here
if(nums==null||nums.length==0)
return 0;
if(nums.length==1)
return nums[0];
int dp = new int[nums.length][2];
dp[0][1] = nums[0];
for(int i=1;i
打劫房屋 II和打劫房屋 III
ii題目 在上次打劫完一條街道之後,竊賊又發現了乙個新的可以打劫的地方,但這次所有的房子圍成了乙個圈,這就意味著第一間房子和最後一間房子是挨著的。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定乙個非負...
lintcode 打劫房屋
假設你是乙個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定乙個非負整數列表,表示每個房子中存放的錢,算一算,如果今晚去打劫,你最多可以得到多少錢 在不觸動報警裝置的...
打劫房屋 III
在上次打劫完一條街道之後和一圈房屋之後,竊賊又發現了乙個新的可以打劫的地方,但這次所有的房子組成的區域比較奇怪,聰明的竊賊考察地形之後,發現這次的地形是一顆二叉樹。與前兩次偷竊相似的是每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且當相鄰的兩個房子同一天被打...