1 条题解

  • 0
    @ 2023-1-18 12:58:33

    仔细观察可以发现以下几点:

    **结论 1:有效层总数不会超过 n+1n+1。**若一层中只有中间的位置有木板或者两边的位置有木板,则此层事实上已经没有实际用处,不妨删除该层。塔的下部每层至多抽出 22 块后该层无效,而在上部添加一层需要 33 块木板。

    结论 2:任意两层非顶层的有效层,可以任意交换。(这是显然的)

    结论 3:任意一层有效层的左右两个位置对称,可以交换。(这也是显然的)

    考虑状态压缩。

    对于一个塔的状态,每一层一个位置有四种状态:放置了木板(三种颜色),以及没有放置木板。而每一层有三个位置,需要占用 66 个二进制位。对于一个塔的状态,有效层至多 n+17n+1\leq 7 层,即至多占用 6×7=426\times 7=42 个二进制位,只需使用 unsigned long long 存储即可。

    每一次状态转移枚举投掷出的三种颜色(投掷出黑色的情况可以 Θ(1)\Theta(1) 处理),再枚举删除的是哪一块该色木板,最后枚举放置在顶层的哪个位置即可。

    具体细节见代码实现。

    • 1

    信息

    ID
    5247
    时间
    5000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    2
    已通过
    1
    上传者