題目如果用暴力求解的話會超時,暴力求解也就是每個數字有三種狀態,不被選中/被選中在左邊集合/被選中在右邊集合,然後找左右集合相加和最大的那種情況。時間複雜度3的n次方。
題目提示是動態規劃題,那麼最重要的就是定義狀態,差點兒把我愁壞了,然後看了解題報告。
題目求廣告牌的最大可能安裝高度,那定義 dp[i][j] 來表示 前 i 個支架高度差為 j 的時候,最長的公共長度。
每多新增乙個支架,則這個支架其實有三個狀態,1.這個支架不新增到任何一端;2.支架新增到高的一端;3.支架新增到短的一端。
支架不新增到任何一端 :
這種情況下的 dp[i][j] = dp[i-1][j] 因為第 i 個不用,所以它的最優的公共長度應該 = max( dp[i-1][j], dp[i][j] )
支架新增到高的一端
這種情況下即,高的更高, dp[i][j+h] = max(dp[i][j+h] , dp[i][j] + h)
支架新增到短的一端
這種情況則是把新加進來的支架加到短的一端,也就是加長了短一端的長度,這個時候還會有兩種情況,要麼是短的加了一截還是短,另一種是短的加了一截變長了。把這兩種情況合併一下:即
dp[i][|j-h|] = max( dp[i][|j-h|] , dp[i-1][j] + min(j, h) )
class
solution
}return dp[len][0
];}}
leetcode 956 最高的廣告牌
給出乙個集合,詢問能否挑出兩個不重疊的子集,使得兩個子集內的數字和一樣,求數字和最大是多少。一開始列舉所有集合然後dp一波果斷t了。正解是f i,j 表示前i個數字,組成的兩個集合差為j的時候較大的集合內的數字和,然後列舉一下三種情況dp即可。一開始少算了一種情況,是把第i加在較小的集合裡,仍沒超過...
LeetCode 956 最高的廣告牌(DP)
你正在安裝乙個廣告牌,並希望它高度最大。這塊廣告牌將有兩個鋼製支架,兩邊各乙個。每個鋼支架的高度必須相等。你有一堆可以焊接在一起的鋼筋 rods。舉個例子,如果鋼筋的長度為 1 2 和 3,則可以將它們焊接在一起形成長度為 6 的支架。返回廣告牌的最大可能安裝高度。如果沒法安裝廣告牌,請返回 0。示...
956 最高的廣告牌 動態規劃
題目描述 你正在安裝乙個廣告牌,並希望它高度最大。這塊廣告牌將有兩個鋼製支架,兩邊各乙個。每個鋼支架的高度必須相等。你有一堆可以焊接在一起的鋼筋 rods。舉個例子,如果鋼筋的長度為 1 2 和 3,則可以將它們焊接在一起形成長度為 6 的支架。返回廣告牌的最大可能安裝高度。如果沒法安裝廣告牌,請返...