1. 程式人生 > >HDU2077:漢諾塔IV

HDU2077:漢諾塔IV

Problem Description 還記得漢諾塔III嗎?他的規則是這樣的:不允許直接從最左(右)邊移到最右(左)邊(每次移動一定是移到中間杆或從中間移出),也不允許大盤放到小盤的上面。xhd在想如果我們允許最大的盤子放到最上面會怎麼樣呢?(只允許最大的放在最上面)當然最後需要的結果是盤子從小到大排在最右邊。

Input 輸入資料的第一行是一個數據T,表示有T組資料。
每組資料有一個正整數n(1 <= n <= 20),表示有n個盤子。

Output 對於每組輸入資料,最少需要的擺放次數。

Sample Input 2 1 10
Sample Output 2 19684

漢諾塔2,3,4

只要A了其中一道

另外兩道都是秒A的嘛

同樣是遞推的問題

在2064的基礎上改變了一些東西,原理差不多,都是隻能先移動到中間的柱子

#include <stdio.h>

__int64 a[100];

void set()
{
    int i;
    a[0] = 0;
    a[1] = 1;
    for(i = 2;i<=64;i++)
    a[i] = 3*a[i-1]+1;
}

int main()
{
    int n,t;
    set();
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%I64d\n",2*a[n-1]+2);
    }

    return 0;
}