1 条题解

  • -3
    @ 2025-10-25 8:45:30

    必须要发现一个性质(猜出一个结论)。

    结论:一定存在一种方案,在保证层数最高的同时,底层宽度最小。

    证明:

    任意取出一个能使层数最高的方案,设有 X 层,把其中从下往上每一层最大的积木块编号记为 AiA_i。该方案称之为方案 X。

    任意取出一个能使底边最短的方案,设有 Y 层,把其中从下往上每一层最大的积木块编号记为 BiB_i。该方案称之为方案 Y。

    显然 A1B1,AYBYA_1 ≥ B_1, A_Y ≤ B_Y,这说明至少存在一个 k 属于 (1,Y),满足 Ak1Bk1A_{k-1} ≥ B_{k-1}AkBkA_k ≤ B_k。也就是说,方案 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 个积木搭建最后一层。

    则:

    f(i)=minj<is(i)s(j)f(j)s(i)s(j)f(i)=\min\limits_{j<i 且 s(i)-s(j)≥f(j)} s(i)-s(j)

    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
    上传者