ACwing 96 奇怪的漢諾塔 區間dp

2022-05-25 15:36:12 字數 936 閱讀 9627

(題面來自acwing)

漢諾塔問題,條件如下:

1、這裡有a、b、c和d四座塔。

2、這裡有n個圓盤,n的數量是恆定的。

3、每個圓盤的尺寸都不相同。

4、所有的圓盤在開始時都堆疊在塔a上,且圓盤尺寸從塔頂到塔底逐漸增大。

5、我們需要將所有的圓盤都從塔a轉移到塔d上。

6、每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓盤時,可將圓盤移至這座塔上。

請你求出將所有圓盤從塔a移動到塔d,所需的最小移動次數是多少。

輸入格式

沒有輸入

輸出格式

對於每乙個整數n(1≤n

≤12'>1≤n≤12

),輸出乙個滿足條件的最小移動次數,每個結果佔一行。

三個柱子的漢諾塔問題最小步數存在通項公式:2^n - 1,其中n為圓盤數。這個式子很容易由首項a_1 = 1和遞推公式a_n = a_(n-1) * 2 + 1得到。遞推式的含義是,先利用2個柱子把上面的n-1個圓盤移到b柱上,把第n個圓盤移到c上,再把b柱上的n-1個移到c上。

四個柱子的漢諾塔問題並不是簡單的逐項遞推,需要在轉移時做出決策。設g[n]為n盤3柱問題的最短步數,f[n]為n盤4柱問題的最短步數,

狀態轉移方程:

f[i] = min(f[i - j] * 2 + g[j])

其中j屬於[1, i)。這個式子的含義是,我們選擇上面的i - j個圓盤,在4柱模式下把它們移到b柱上,然後用其餘的3個柱子把剩下的i個圓盤移到d柱上,最後把b柱上的圓盤在4柱模式下移到d柱上。

**:#include 

#include 

#include 

using namespace std;  

int g[20], f[20], ans;  

int main()   

return 0;  

}  

96 奇怪的漢諾塔

漢諾塔問題,條件如下 1 這裡有a b c和d四座塔。2 這裡有n個圓盤,n的數量是恆定的。3 每個圓盤的尺寸都不相同。4 所有的圓盤在開始時都堆疊在塔a上,且圓盤尺寸從塔頂到塔底逐漸增大。5 我們需要將所有的圓盤都從塔a轉移到塔d上。6 每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓...

奇怪漢諾塔

奇怪漢諾塔 題目描述 漢諾塔問題,條件如下 這裡有 a b c 和 d 四座塔。這裡有 個圓盤,的數量是恆定的。每個圓盤的尺寸都不相同。所有的圓盤在開始時都堆疊在塔 a 上,且圓盤尺寸從塔頂到塔底逐漸增大。我們需要將所有的圓盤都從塔 a 轉移到塔 d 上。每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤...

奇怪的漢諾塔

漢諾塔問題,條件如下 1 這裡有a b c和d四座塔。2 這裡有n個圓盤,n的數量是恆定的。3 每個圓盤的尺寸都不相同。4 所有的圓盤在開始時都堆疊在塔a上,且圓盤尺寸從塔頂到塔底逐漸增大。5 我們需要將所有的圓盤都從塔a轉移到塔d上。6 每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓...