LintCode 535 打劫房屋 III

2022-06-05 13:36:10 字數 1166 閱讀 9281

在上次打劫完一條街道之後和一圈房屋之後,竊賊又發現了乙個新的可以打劫的地方,但這次所有的房子組成的區域比較奇怪,聰明的竊賊考察地形之後,發現這次的地形是一顆二叉樹。與前兩次偷竊相似的是每個房子都存放著特定金額的錢。你面臨的唯一約束條件是:相鄰的房子裝著相互聯絡的防盜系統,且當相鄰的兩個房子同一天被打劫時,該系統會自動報警。

算一算,如果今晚去打劫,你最多可以得到多少錢,當然在不觸動報警裝置的情況下。

樣例1輸入:

輸出: 7

解釋:最多能偷 3 + 3 + 1 = 7.

3

/ \2 3

\ \

3 1

樣例2

輸入:

輸出: 9

解釋:最多能偷 4 + 5 = 9.

3

/ \4 5

/ \ \

1 3 1

這題是house robber和house robber ii的擴充套件,只不過這次地形由直線和圈變成了二叉樹。

解題思路與 [lintcode 614.] 二叉樹的最長連續子串行 ii 類似:

使用記錄每乙個結點的狀態,遞迴計算得出答案。

這裡對於每乙個結點都有兩狀態,被搶劫,或者不被搶劫。需要的狀態為當前子樹上搶劫的最大收益,對於乙個結點:

1

/ \2 3

/ \

5 4

最多能偷 5 + 4 + 3 = 12。

/**

* definition of treenode:

* class treenode

* }*/struct res ;

class solution

static res rob3(treenode* r) ;

res res1 = rob3(r->left);

res res2 = rob3(r->right);

int rob = r->val + res1.skip + res2.skip;

int skip = max(res1.rob, res1.skip) + max(res2.rob, res2.skip);

return ;

}};

LintCode 534 打劫房屋 II

在上次打劫完一條街道之後,竊賊又發現了乙個新的可以打劫的地方,但這次所有的房子圍成了乙個圈,這就意味著第一間房子和最後一間房子是挨著的。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定乙個非負整數列表,...

lintcode 打劫房屋

假設你是乙個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定乙個非負整數列表,表示每個房子中存放的錢,算一算,如果今晚去打劫,你最多可以得到多少錢 在不觸動報警裝置的...

LintCode 打劫房屋

描述 假設你是乙個專業的竊賊,準備沿著一條街打劫房屋。每個房子都存放著特定金額的錢。你面臨的唯一約束條件是 相鄰的房子裝著相互聯絡的防盜系統,且 當相鄰的兩個房子同一天被打劫時,該系統會自動報警。給定乙個非負整數列表,表示每個房子中存放的錢,算一算,如果今晚去打劫,你最多可以得到多少錢 在不觸動報警...