#11024. 书架问题
书架问题
题目分析
琪儿需要放 N 本书到一个宽度为 Sw 的书架上,书的宽度和高度已知,且书的顺序不能改变。问题的目标是计算放置这些书所需要的最小高度。

思路
- 问题理解:
- 给定每本书的宽度
Wi和高度Li,书架的最大宽度是Sw。 - 书必须按照顺序排放在书架上,不能打乱顺序。
- 书架上每一层的宽度之和不能超过
Sw,如果某一层的宽度已经满了,剩余的书就放到下一层。 - 目标是计算最小的书架高度,书架的高度等于放置书的层数的总和。
- 给定每本书的宽度
- 解决方案:
- 贪心策略:我们从左到右依次放书,每次尝试把当前书放到当前层。如果当前层放不下,则开始新的一层。
- 具体步骤:
- 维护一个变量
current_width表示当前层的总宽度。 - 维护一个变量
total_height表示当前已经用掉的高度。 - 遍历每一本书:
- 如果当前书能够放进当前层(即
current_width + Wi ≤ Sw),则把它放进去。 - 如果当前书放不下,则开始新的一层,增加总高度。
- 如果当前书能够放进当前层(即
- 维护一个变量
- 边界条件:
- 如果书只有一层,那就是一个层的高度。
- 如果书的宽度可以正好填满每一层的最大宽度,层数可能等于书的数量。
复杂度分析
- 时间复杂度:
O(N),遍历每一本书,逐一判断是否能放入当前层。 - 空间复杂度:
O(1),只用了常数级别的空间。
示例
输入:
5 5
2 1
1 2
1 3
2 3
2 2
输出:
5
解释:
- 第1层放
2 1和1 2,总宽度为2 + 1 = 3,最大高度为2。 - 第2层放
1 3,2 3和2 2,总宽度为1 + 3 + 2 = 6,所以第二层开始新的一层,最大高度为3。
所以总高度是 2 + 3 = 5。
统计
相关
在下列比赛中: