這道題目會用到hdu2064漢諾塔iii的遞推式,可以參考我的另一篇部落格:漢諾塔iii。
本問題和iii的區別在於最後乙個圓盤,但恰恰因為最後乙個圓盤,之前的思路需要大的改動(因為我們不知道最後一塊圓盤到底是第幾塊)。
假設變數:
-設a[i]為將第i塊圓盤從左邊移動到右邊(或從右到左)的步數;
-b[i]為將第i塊圓盤從左邊移動到中間(或從右到中間,或從中間到左、右)的步數;
-c[i]為如果i為最後乙個圓盤,一共所需要的步數
分析思路如下:
以上三行總結的公式:c[n]=2*b[n-1]+2 ;
現在我們需要求b[i]:
以上總結出的公式為:b[i]=a[i-1]+b[i-1]+1;
現在我們需要求a[i],而求a[i]的方式在漢諾塔iii的部落格裡面,不再贅述。
#include
using
namespace
std;
int main()
for(i=1;i<20;i++)
for(i=1;i<20;i++)
scanf("%d",&t);
while(t--)
return
0;}
HDU 2077 漢諾塔IV 題解
由題意得 1.此題相較於傳統的漢諾塔問題,多了乙個新限制 從左 右 邊到最右 左 邊時,必須經過中間 少了乙個舊限制 允許最大的盤子放到最上面 2.問題就變成了三個步驟 一 將 n 1 個盤子從最左邊移到中間,二 然後加 2 三 最後再將這 n 1 個盤子從中間移到最右邊 3.由於最大的盤子能夠承載...
HDU 2077 漢諾塔IV 遞迴 通項公式
剛剛做的hdu 2064很好找規律,回憶一下 b 1 2 b n b n 1 3 2 可得b n 3 n 1 不懂的傳送門 這題題目差不多,就是放寬條件,但只允許把最大的放在最上面。其實我看的時候沒有仔細想。它的輸入已經暴露了它的公式。因為兩題差不多,所以應該也是與3的n次冪有關。計算3的10次為5...
HDU 1207 漢諾塔II(遞推)
problem description 經典的漢諾塔問題經常作為乙個遞迴的經典例題存在。可能有人並不知道漢諾塔問題的典故。漢諾塔 於印度傳說的乙個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從下往上按大小順序摞著64片 圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並...