題目大意:
給出一個(gè)玩到一半的漢諾塔。叫你把所有的盤子歸到任意一根針上,求最少步數(shù)。
由于結(jié)果很大,輸出它和100000的模。
最基本的思路是動(dòng)態(tài)規(guī)劃,跟一般的漢諾塔問題類似
位于任意一個(gè)狀態(tài)的漢諾塔。必然有位于最底層的最大的盤子。
最終的目的是把這個(gè)盤子移動(dòng)到某根針上。
所以必然會(huì)出現(xiàn)的一個(gè)場(chǎng)景就是:
最大的盤子單獨(dú)在一根針上,其他的盤子在另外一根針上
假設(shè):
f(n, idx) = { 將初始狀態(tài)下盤子 1~n 集中到第idx根針上所需要的最小步數(shù) }
g(n) = { 將位于一根針上的盤子 1~n 移動(dòng)到另外一根針?biāo)枰淖钚〔綌?shù) }
那么轉(zhuǎn)移方程就是:
f(n, idx) = {
如果盤子n位于idx:f(n - 1, idx)
否則:f(n - 1, idx)
}
從普通的漢諾塔問題上可以得出:
g(n) = 2^n - 1