n段目の棚を開閉する動作を[n]、複数の棚を連続で開閉する動作を[a,b,c,…]と表現すると
<tt> 1段目の棚の状態を反転:A
1 = [1]
1段目の棚まで全て閉じているとき、2段目の棚の状態を反転:A
2 = [1,2,1]
2段目の棚まで全て閉じているとき、3段目の棚の状態を反転:A
3 = [1,2,1,3,1,2,1]</tt>
(n-1)段目の棚まで全て閉じているとき、n段目の棚の状態を反転する手順をA
nとすると、
A
n = A
n-1 + [n] + A
n-1 と表ることができます。
また、A
nを実行するのにかかる手数は 2
n - 1 手であることも確認できます。
今回の問題では6段目の棚を開ける必要があります。
そのためには5段目の棚だけを開いた状態にする必要があるので、
6段目の棚を開けるまでの手順はA
5 + [6]となります。
しかし、一つ上の棚が
開いている状態では、
すぐ上の棚が邪魔で箱は取り出せない。よって、5段目の棚を閉じる動作も行う必要があります。
取り出せるようになるまでの手順は A
5 + [6] + A
4 + [5] 、手数は 31 + 1 + 15 + 1 = 48手。
※一般的に、n番目(n≧2)の棚から箱を取りだすためには、最短 3 × 2n / 4 手がかかるようです。<tt>動かし方の図解。□◇:閉じた棚 ■◆:開いた棚
┌── A5前半 ──┐
□ ◆ ■ ◇ □ ◆ ■ ◇ □ ◆ ■ ◇ □ ◆ ■ ◇ □
□ □ ◆ ■ ■ ■ ◇ □ □ □ ◆ ■ ■ ■ ◇ □ □
□→□→□→□→◆→■→■→■→■→■→■→■→◇→□→□→□→□┐ 16
□ □ □ □ □ □ □ □ ◆ ■ ■ ■ ■ ■ ■ ■ ■│
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ◆│
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □│
┌────────────────────────────────┘
│ ┌── A5後半 ──┐ [6]
│ ◆ ■ ◇ □ ◆ ■ ◇ □ ◆ ■ ◇ □ ◆ ■ ◇ □
│ □ ◆ ■ ■ ■ ◇ □ □ □ ◆ ■ ■ ■ ◇ □ □
└→□→□→□→◆→■→■→■→■→■→■→■→◇→□→□→□→□┐ 32
■ ■ ■ ■ ■ ■ ■ ◇ □ □ □ □ □ □ □ □│
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■│
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ◆│
┌────────────────────────────────┘
│ ┌── A4 ──┐ [5]
│ ◆ ■ ◇ □ ◆ ■ ◇ □ ◆ ■ ◇ □ ◆ ■ ◇ □
│ □ ◆ ■ ■ ■ ◇ □ □ □ ◆ ■ ■ ■ ◇ □ □
└→□→□→□→◆→■→■→■→■→■→■→■→◇→□→□→□→□ 48
□ □ □ □ □ □ □ ◆ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ◇
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■</tt>
みれい 2011/03/21 11:20
<tt> 1段目の棚の状態を反転:A1 = [1]
1段目の棚まで全て閉じているとき、2段目の棚の状態を反転:A2 = [1,2,1]
2段目の棚まで全て閉じているとき、3段目の棚の状態を反転:A3 = [1,2,1,3,1,2,1]</tt>
(n-1)段目の棚まで全て閉じているとき、n段目の棚の状態を反転する手順をAnとすると、
An = An-1 + [n] + An-1 と表ることができます。
また、Anを実行するのにかかる手数は 2n - 1 手であることも確認できます。
今回の問題では6段目の棚を開ける必要があります。
そのためには5段目の棚だけを開いた状態にする必要があるので、
6段目の棚を開けるまでの手順はA5 + [6]となります。
しかし、一つ上の棚が開いている状態では、すぐ上の棚が邪魔で箱は取り出せない。
よって、5段目の棚を閉じる動作も行う必要があります。
取り出せるようになるまでの手順は A5 + [6] + A4 + [5] 、手数は 31 + 1 + 15 + 1 = 48手。
※一般的に、n番目(n≧2)の棚から箱を取りだすためには、最短 3 × 2n / 4 手がかかるようです。