————————————————————————————————————————————
附近的家居城**,你買回了一直心儀的可調節書架,打算把自己的書都整理到新的書架上。
你把要擺放的書 books 都整理好,疊成一摞:從上往下,第 i 本書的厚度為 books[i][0],高度為 books[i][1]。
按順序 將這些書擺放到總寬度為 shelf_width 的書架上。
先選幾本書放在書架上(它們的厚度之和小於等於書架的寬度 shelf_width),然後再建一層書架。重複這個過程,直到把所有的書都放在書架上。
需要注意的是,在上述過程的每個步驟中,擺放書的順序與你整理好的順序相同。 例如,如果這裡有 5 本書,那麼可能的一種擺放情況是:第一和第二本書放在第一層書架上,第三本書放在第二層書架上,第四和第五本書放在最後一層書架上。
每一層所擺放的書的最大高度就是這一層書架的層高,書架整體的高度為各層高之和。
以這種方式布置書架,返回書架整體可能的最小高度。
輸入:books = [[1,1],[2,3],[2,3],[1,1],[1,1],[1,1],[1,2]], shelf_width = 4
輸出:6
解釋:3 層書架的高度和為 1 + 3 + 2 = 6 。
第 2 本書不必放在第一層書架上。
————————————————————————————————————————————
解題思路:使用動態規劃,假設dp[i]代表當前書架中i本書的最小高度。對於第i+1本書,最壞的情況是在dp[i]的高度下加上第i+1本書的高度,這樣可以進行比較。對於第i本書,考慮第i本書和第i+1本書在同一層的書架的高度,這時候如果寬度仍然符合要求,則可以考慮將i+1和i和i-1本書放在一起書架的高度,依次類推,直到書架寬度超出要求,則可以得到i+1本書的最低高度。其c++**如下:
class solution
}return dp[length];
}};
LeetCode 1105 填充書架(DP)
你把要擺放的書 books 都整理好,疊成一摞 從上往下,第 i 本書的厚度為books i 0 高度為books i 1 按順序將這些書擺放到總寬度為shelf width的書架上。先選幾本書放在書架上 它們的厚度之和小於等於書架的寬度 shelf width 然後再建一層書架。重複這個過程,直到...
1105 填充書架
按順序 將這些書擺放到總寬度為 shelf width 的書架上。先選幾本書放在書架上 它們的厚度之和小於等於書架的寬度 shelf width 然後再建一層書架。重複這個過程,直到把所有的書都放在書架上。需要注意的是,在上述過程的每個步驟中,擺放書的順序與你整理好的順序相同。例如,如果這裡有 5 ...
leetcode筆記 116填充同一層的兄弟節點
題目 給定乙個二叉樹 struct treelinknode填充它的每個 next 指標,讓這個指標指向其下乙個右側節點。如果找不到下乙個右側節點,則將 next 指標設定為null。初始狀態下,所有 next 指標都被設定為null。說明 示例 給定完美二叉樹,1 2 3 4 5 6 7呼叫你的函...