poj 1920 漢諾塔變種

2021-08-28 01:23:36 字數 595 閱讀 5586

思維題 鏈結

暫時沒明白為啥好多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移...