1 条题解
-
-3
必须要发现一个性质(猜出一个结论)。
结论:一定存在一种方案,在保证层数最高的同时,底层宽度最小。
证明:
任意取出一个能使层数最高的方案,设有 X 层,把其中从下往上每一层最大的积木块编号记为 。该方案称之为方案 X。
任意取出一个能使底边最短的方案,设有 Y 层,把其中从下往上每一层最大的积木块编号记为 。该方案称之为方案 Y。
显然 ,这说明至少存在一个 k 属于 (1,Y),满足 且 。也就是说,方案 X 第 k 层完全被方案 Y 第 k 层包含。
构造一个新方案,第 k 层往上按方案 X,往下按方案 Y,两边都不要的积木块放中间当第 k 层。新方案的层数与 X 相同,而底边长度与 Y 相同。
证毕。
直观感觉:平均身材最瘦的大厦是最高的。
为方便思考,将积木逆序使用,搭建大厦。作如下定义:
f(i) : 1~i 的积木搭成的大厦底层的最小总宽度
g(i) : 1~i 的积木满足 f(i) 最小时搭成的大厦的最大高度(层数)
s(i) : 1~i 的积木的宽度的前缀和
转移: 1~j 个积木搭建完前面层,j+1 ~ i 个积木搭建最后一层。
则:
g(i) = g(p)+1
(p 为 f(i) 取最优值时对应的位置,即上一层最后一块积木的编号)
复杂度 O(n^2)
优化:
将条件整理得: s(i)≥s(j)+f(j)
注意:s(j)+f(j) 对 j 不具有单调性
则当 k<j 时,若 f(j)+s(j)≤f(k)+s(k) 则 k 可以舍去。
综上,可以进行单调队列维护。
- 1
信息
- ID
- 518
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 9
- 已通过
- 2
- 上传者