漢諾塔問題,條件如下:
1、這裡有a、b、c和d四座塔。
2、這裡有n個圓盤,n的數量是恆定的。
3、每個圓盤的尺寸都不相同。
4、所有的圓盤在開始時都堆疊在塔a上,且圓盤尺寸從塔頂到塔底逐漸增大。
5、我們需要將所有的圓盤都從塔a轉移到塔d上。
6、每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓盤時,可將圓盤移至這座塔上。
請你求出將所有圓盤從塔a移動到塔d,所需的最小移動次數是多少。
沒有輸入
對於每乙個整數n(1≤n≤12),輸出乙個滿足條件的最小移動次數,每個結果佔一行。
首先考慮3個塔的漢諾塔問題,最優秀方案:假設有三個圓盤a,b,c,先從a挪走n-1個圓盤到b,然後再從a挪走圓盤n到c,
然後把b上的n-1個圓盤移到c,因此可以得出遞推方程也就是 a[i]=a[i-1]*2+1;
然後考慮4塔問題,首先挪走j個塔,也就是有4個塔可以選擇,然後再挪走剩下的n-j個塔,此時有三個塔可以選擇,因此這就是我們的狀態轉移方程:b[i]=min(b[i],b[j]*2+a[i-j]);
#include#include#include#includeusing namespace std;
const int maxn=1e5+5;
int a[15],b[15];
int main()
memset(b,0x3f,sizeof(b));
b[0]=0;
for(int i=1;i<=12;i++)
}for(int i=1;i<=12;i++)
return 0;
}
奇怪漢諾塔
奇怪漢諾塔 題目描述 漢諾塔問題,條件如下 這裡有 a b c 和 d 四座塔。這裡有 個圓盤,的數量是恆定的。每個圓盤的尺寸都不相同。所有的圓盤在開始時都堆疊在塔 a 上,且圓盤尺寸從塔頂到塔底逐漸增大。我們需要將所有的圓盤都從塔 a 轉移到塔 d 上。每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤...
遞推 B 例題2 奇怪漢諾塔
漢諾塔問題,條件如下 這裡有 a aa b bb c cc 和 d dd 四座塔。這裡有 n nn個圓盤,n nn 的數量是恆定的。每個圓盤的尺寸都不相同。所有的圓盤在開始時都堆疊在塔 a aa上,且圓盤尺寸從塔頂到塔底逐漸增大。我們需要將所有的圓盤都從塔 a aa 轉移到塔 d dd 上。每次可以...
奇怪的漢諾塔
漢諾塔問題,條件如下 1 這裡有a b c和d四座塔。2 這裡有n個圓盤,n的數量是恆定的。3 每個圓盤的尺寸都不相同。4 所有的圓盤在開始時都堆疊在塔a上,且圓盤尺寸從塔頂到塔底逐漸增大。5 我們需要將所有的圓盤都從塔a轉移到塔d上。6 每次可以移動乙個圓盤,當塔為空塔或者塔頂圓盤尺寸大於被移動圓...