we set dp[i] as the min height of putting previous i's book.
how can we update, we just need to take the previous book shelves book to put them in the new shelve (to ensure it wouldnt exceed the length of the book shelve), and we take the max value of book you havent just taken to be the height of the new shelve and add into our ans.
P.S. if we have taken out all the book, to ensure over boundary, pls judge the edge case .
class Solution {
public:
int minHeightShelves(vector<vector<int>>& books, int l) {
int n = books.size();
vector<int> dp(n, INT_MAX);
for(int i = 0; i < n; i++){
int w = 0;
int h = 0;
for(int j = i; j >= 0; j--){
if((w += books[j][0]) > l)break;
h = max(h, books[j][1]);
dp[i] = min(dp[i], ((j == 0)? 0 : dp[j - 1]) + h);
}
}
return dp.back();
}
};