1 条题解
-
0
仔细观察可以发现以下几点:
**结论 1:有效层总数不会超过 。**若一层中只有中间的位置有木板或者两边的位置有木板,则此层事实上已经没有实际用处,不妨删除该层。塔的下部每层至多抽出 块后该层无效,而在上部添加一层需要 块木板。
结论 2:任意两层非顶层的有效层,可以任意交换。(这是显然的)
结论 3:任意一层有效层的左右两个位置对称,可以交换。(这也是显然的)
考虑状态压缩。
对于一个塔的状态,每一层一个位置有四种状态:放置了木板(三种颜色),以及没有放置木板。而每一层有三个位置,需要占用 个二进制位。对于一个塔的状态,有效层至多 层,即至多占用 个二进制位,只需使用
unsigned long long
存储即可。每一次状态转移枚举投掷出的三种颜色(投掷出黑色的情况可以 处理),再枚举删除的是哪一块该色木板,最后枚举放置在顶层的哪个位置即可。
具体细节见代码实现。
- 1
信息
- ID
- 5247
- 时间
- 5000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者