Skip to content
Ficon's Paper
Go back

2232D

一个变种的汉诺塔问题。

每个圆盘有一个限制 aia_i,该圆盘可移动当且仅当其满足条件:在它上方的圆盘数量等于 aia_i,而第 ii 个圆盘上面最多有 i1i - 1 个圆盘,所以一旦 aiia_i \geq i,就无解。

f(i)f(i) 为把 ii 个圆盘移动到目标柱的移动次数,使用数学归纳法来证明 f(i)2i1f(i)\leq 2^i-1,首先 f(1)=1f(1)=1,成立。

注意 ff 一定是单调不降

现在假设对于 k[1,i1]k\in[1,i-1] 成立:

对于 ai=0a_i=0,就变成了经典的汉诺塔问题的情况,我们先把上面 i1i - 1 个圆盘移动到辅助柱,再把第 ii 个圆盘移动到目标柱,再把 i1i - 1 个圆盘从辅助柱移动到目标柱即可,此时 f(i)=2f(i1)+12i1f(i)=2f(i-1)+1\leq 2^i-1

对于 ai>0a_i>0,此时可以先把 iai1i - a_{i} - 1 个圆盘移动到辅助柱,此时把第 ii 个圆盘移动到目标柱,然后把 iai1i - a_i - 1 个圆盘移动回起始柱,最后把 n1n - 1 个圆盘移动到目标柱,则此时 f(i)=2f(iai1)+f(i1)+12f(i2)+f(i1)+12i22i1f(i)=2f(i - a_{i}-1)+f(i - 1)+1\leq 2f(i-2)+f(i-1)+1 \leq 2^i-2 \leq 2^i - 1,得证,可以在 2n2^n 时间复杂度内解决。


Share this post on:

Next Post
2231D