算法描述
思想
- dp[0] = 0
- h = max(h,books[h][0])
- 在满足当面width < shelf_width的情况下,计算dp[i] = min(dp[i],dp[j-1]+height)
代码实现
class Solution {
public int minHeightShelves(int[][] books, int shelf_width) {
int n = books.length+1;
int[] dp = new int[n];
for(int i = 0;i < n;i++){
dp[i] = Integer.MAX_VALUE;
}
dp[0] = 0;
for(int i = 1;i<n;i++){
int height = 0;
int width = 0;
for(int j = i;j > 0;j--){
width += books[j-1][0];
if(width > shelf_width){
break;
}
height = Math.max(height, books[j-1][1]);
dp[i] = Math.min(dp[i],dp[j-1]+height);
}
}
return dp[n-1];
}
}