关键思维:
因为是顺序放入,枚举所有可以组成一行的双闭区间[L,R],来取最小即可。
class Solution {
public:
int minHeightShelves(vector<vector<int>>& books, int shelf_width) {
int N = books.size();
int dp[N+1]; // dp[K]放入前K本书后的最小高度
memset(dp,0x3f,sizeof(dp));
dp[0] = 0;
// 枚举区间左边界L
for(int L=0;L<N;L++){
// 枚举区间右边界R
int W = 0, H = 0;
for(int R=L;R<N;R++){
W += books[R][0];
H = max(H,books[R][1]);
if(W > shelf_width) break;
else dp[R+1] = min(dp[R+1],dp[L] + H);
}
}
return dp[N];
}
};
最小书架高度算法
本文介绍了一种通过枚举双闭区间求解最小书架高度的算法。利用动态规划思想,计算不同书籍组合下的最小高度,确保不超过书架宽度限制。
2337

被折叠的 条评论
为什么被折叠?



