1 条题解

  • 1
    @ 2026-9-11 10:56:00

    在《算法竞赛进阶指南》上也有证明,设 dnd_n 代表求解 nn33 柱的最少步数,那么我们可以将这个 44 柱分解成两个 33 柱的来看,设 fnf_n 代表求解 nn44 柱的最少步数,则有递推式:

    fn=min(2fi+dni)f_n=\min(2*f_i+d_{n-i})

    其中 f1=1f_1=1,代表我们先把 ii 个盘子移动到 BB 柱,将 nin-i 个盘子移动到 DD 柱,最后把 ii 个盘子移动到 DD 柱。

    时间复杂度严格小于 O(1+3×n)O(1+3 \times \sqrt{n})

    代码就不放了。

    番外:

    做这个题的时候是大佬 @Programming_Konjac 打表发现了一些规律后先 AC 了,后来他告诉我,我也 AC 了,再后来大佬 @zouyihang 对这个式子进行了证明并成功,同时,他也对这个题目进行了复杂度的进一步优化,有望搞到 O(1)O(1)。目前好像到了 O(logn)O(\log n),具体的我现在也不清楚。至后期我发现了在《算法竞赛进阶指南》上也有这道题目做法的证明。

    • 1

    信息

    ID
    327
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    (无)
    递交数
    23
    已通过
    12
    上传者