思維題 鏈結
暫時沒明白為啥好多poj的總結把它放在dp裡
題目大意:現有漢諾塔殘局,也就是說盤子零散地插在三個釘子上,當然各自也都遵守「上小下大」的擺放規律。求將其全部整理至乙個釘子上所需最少步數,輸出最後所在釘子位置(1,2,3)以及最小步數。
首先對於基礎的漢諾塔問題,由數列遞推式可得,將高度為n的塔從乙個釘子上轉移到另外乙個釘子上所需步數為(2^n-1)
對於本題目,可逆向考慮,即求將乙個整理好的塔分散至開局情況,所需最小步數。兩者是一致的。
演算法大致為,從下至上詢問目的位置,在當前位則不需要移動,不在當前位則將其上(i-1)個移動至另乙個位置,再將該盤子(i)移至目的地,花費(2^(i-1))步數。
#include#includeusing namespace std;
const int mod=1000000;
int pos[100000+4],num[3];
int s[100000+4];
int n;
int main()
}cout<}
return 0;
}
變種漢諾塔問題
變種漢諾塔問題和傳統漢諾塔問題類似,規則描述如下 1.有三根柱子,從左到右編號為0 1 2。最左側0號柱子上放置著若干圓盤。與傳統漢諾塔不同的是,其中存在部分大小相同的圓盤。2.要求包括初始狀態在內,每個圓盤上方放置的圓盤不得大於該圓盤,即圓盤上方只能放置小於自己或和自己相同大小的圓盤 3.每次移動...
python 漢諾塔 Python漢諾塔
import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...
漢諾塔合集之漢諾塔3
漢諾塔3 步驟分析 1.當只有乙個圓盤時,要從a到b再到c 2.同樣擴充套件經典漢諾塔問題來看,先把a柱上 n 1 個圓盤,經b移動到c 3.把最後乙個圓盤從a移動到b 4.把c柱上的 n 1 個圓盤,經b移動 移回 到a 5.把b上的最後乙個圓盤從b移到c 6.最後把a上的 n 1 個圓盤經過b移...