leetcode1105 Filling Bookcase Shelves

 1 """
 2 本题简单的一点就在于摆放的顺序和原顺序一致
 3 定义dp[i]为前i本书能够到达的最小高度。
 4 则对于第i+1本书,有两类选择。
 5 如自己单独一层,则状态转移方程为dp[i+1] = dp[i] + h[i+1]
 6 如果和前面的书放在一起,则状态转移方程为
 7 dp[i+1] = min(dp[j] + max[h[j+1] ~ h[i+1])),
 8 其中需要满足sum(w[j+1] ~ w[i+1]) <= shelf_width,含义是前j本书组成若干层,第j+1到第i+1本书组成一层。
 9 对于这些选择,取最小值
10 链接:https://www.jianshu.com/p/cf4c0054db09
11 """
12 class Solution:
13     def minHeightShelves(self, books, shelf_width):
14         dp = [float('inf')]*(len(books)+1)
15         dp[0] = 0
16         for i in range(1, len(books)+1):
17             width, j, height = 0, i, 0
18             while j > 0:
19                 width += books[j-1][0]
20                 if width > shelf_width:
21                     break
22                 height =  max(books[j-1][1], height)
23                 dp[i] = min(dp[i], dp[j-1]+height)
24                 j -= 1
25         return dp[-1]

 

posted @ 2020-03-04 22:59  yawenw  阅读(148)  评论(0编辑  收藏  举报