洛谷 P1096 Hanoi雙塔問題

2022-04-05 03:33:29 字數 1245 閱讀 7535

給定a、b、c三根足夠長的細柱,在a柱上放有2n個中間有孔的圓盤,共有n個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的(下圖為n=3的情形)。

現要將這些圓盤移到c柱上,在移動過程中可放在b柱上暫存。要求:

(1)每次只能移動乙個圓盤;

(2)a、b、c三根細柱上的圓盤都要保持上小下大的順序;

任務:設an為2n個圓盤完成上述任務所需的最少移動次數,對於輸入的n,輸出an。

輸入格式:

輸入檔案hanoi.in為乙個正整數n,表示在a柱上放有2n個圓盤。

輸出格式:

輸出檔案hanoi.out僅一行,包含乙個正整數, 為完成上述任務所需的最少移動次數an。

輸入樣例#1: 複製

【輸入樣例1】

1【輸入樣例2】

2

輸出樣例#1: 複製

【輸出樣例1】

2【輸出樣例2】

6

【限制】

對於50%的資料,1<=n<=25

對於100%的資料,1<=n<=200

【提示】

設法建立an與an-1的遞推關係式。

思路:先找出an的通項公式,而兩個相同的圓盤移動方法和乙個圓盤的移動方法差不多,只要最後再乘二就好了,先考慮每種大小乙個圓盤

而顯然an=2*an-1+1,就相當於先把上面n-1個圓盤先挪走,再挪最大的,再把n-1個挪到它上面

又因為a1=1,因此有an=2^n-1,最後再乘二,an=2^(n+1)-2

寫的話用高精度,算出2^(n+1),注意到2的冪的個位數字是2,4,8,6,所有再減二的時候不用考慮退位

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

int a[205

];int

n,len,newl;

intmain()

}len=newl;}a[

1]=a[1]-2

;

for(int i=len;i>=1;i--) printf("%d"

,a[i]);

return0;

}

P1096 Hanoi 雙塔問題

原題位址 給定a b c三根足夠長的細柱,在a柱上放有2n個中間有孔的圓盤,共有n個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的 下圖為n 3的情形 現要將這些圓盤移到cc柱上,在移動過程中可放在bb柱上暫存。要求 1 每次只能移動乙個圓盤 2 a b c三根細柱上的圓盤都要保...

高精度 P1096 Hanoi 雙塔問題

題目描述 給定a b c三根足夠長的細柱,在a柱上放有2n個中間有孔的圓盤,共有n個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的 下圖為n 3的情形 現要將這些圓盤移到c柱上,在移動過程中可放在b柱上暫存。要求 1 每次只能移動乙個圓盤 2 a b c三根細柱上的圓盤都要保持上...

網路流24題 23 洛谷P3356 火星探險問題

題意 q p q pq p的網格,有障礙 平坦地面 岩石標本,求從左上角到右下角最多運送車輛的情況下,運送的石子數最多,輸出車輛走的路徑。思路 35 35的圖很小,拆點建圖,有石子的一條邊容量為1,費用 1,另一條容量inf,費用0.最後的輸出答案跑n遍dfs,每次沿著flow 0的邊走到終點,並把...