原题链接:https://leetcode-cn.com/problems/filling-bookcase-shelves/
动态规划
dp[i]表示第i本书之前最小高度
状态转移:
dp[i]=min(dp[i],dp[j]+h) 0=<j<i
代码:
int minHeightShelves(vector<vector<int>>& books, int shelf_width) {
int nums=books.size();
vector<int> dp(nums+1,1000000);
dp[0]=0;
for(int i=1;i<=nums;i++){
int h=0,width=0;
for(int j=i-1;j>=0;j--){//必须逆序,因为如果超出宽度就跳出了
width+=books[j][0];
if(width>shelf_width) break;//如果宽度超出限制就跳出
h=max(h,books[j][1]);//h保存了每次最高的高度
dp[i]=min(dp[i],dp[j]+h);
}
}
return dp[nums];
}
图解里有详细图示