Filling bookshelves leetcode solution explained code example
Example: Filling Bookcase shelves solution
from typing import List
class Solution:
def minHeightShelves(self, b: List[List[int]], w: int) -> int:
print(f'Books: {b}\nShelf width: {w}')
n = len(b)
dp = [float('inf')] * (n + 1)
dp[0] = 0
print(f'initial dp: {dp}')
for i in range(n):
print()
print('-' * 80)
print(f'[{i+1} books] to consider: {b[:i+1]}')
j = i
width = 0
h = 0
while j >= 0:
print(f'place [{j}]-th book: {b[j]}')
width += b[j][0]
if width > w:
print('The total width is beyond the shelf')
break
print(f'The maximum height is updated from [{h}] to [{max(h, b[j][1])}]')
h = max(h, b[j][1])
print(f'The minimum total height for [{i+1} books] is update from [{dp[i + 1]}] to [{min(dp[i + 1], dp[j] + h)}]')
dp[i + 1] = min(dp[i + 1], dp[j] + h)
j -= 1
return dp[-1]