洛谷P1242 新漢諾塔

2022-04-05 22:09:20 字數 902 閱讀 5036

首先要將第n個盤子從x到y,那麼就要把比n小的盤子全部移到6-x-y,然後將n移到y

仔細想想:6代表的是3根初始柱,3根目標柱。

6-(x+y) 便是我們的中轉柱了,因為到這個位置是最優的。

感覺題目有鍋啊。

#include #include #include #include using namespace std;

const int maxn = 55;

inline int read()

while(ch >= '0' && ch <= '9')

return x * f;

}int n,flag,x,ans;

int a[maxn],b[maxn];

void dfs(int x,int dep)

int main()

flag = read();

for(int i=1;i<=flag;i++)

flag = read();

for(int i=1;i<=flag;i++)

flag = read();

for(int i=1;i<=flag;i++)

flag = read();

for(int i=1;i<=flag;i++)

flag = read();

for(int i=1;i<=flag;i++)

flag = read();

for(int i=1;i<=flag;i++)

for(int i=n;i>=1;i--)

dfs(i , b[i]);

printf("%d",ans);

return 0;

}

說明:本人蒟蒻,第11個hack資料至今沒過,就90分的** + 偷偷打表(噓)。

dfs 洛谷 P1242 新漢諾塔

題目描述 設有n個大小不等的中空圓盤,按從小到大的順序從1到n編號。將這n個圓盤任意的迭套在三根立柱上,立柱的編號分別為a b c,這個狀態稱為初始狀態。現在要求找到一種步數最少的移動方案,使得從初始狀態轉變為目標狀態。移動時有如下要求 一次只能移乙個盤 不允許把 移到小盤上面。輸入輸出格式 輸入格...

洛谷 4285 SHOI 漢諾塔

這道題我到現在也沒有全懂,只能大概理解一下思路 首先g x i 表示當執行到i層x最優到g x i 裡去 f x i 表示當執行到i層從x到g x i 需要的步數 很明顯i 和 i 1是存在遞推關係的 設g x i 1 y,表示上一次最優x到y,如果上一次最優g y i 1 是到z的話,先把最後乙個...

遞迴 新漢諾塔

時間限制 1 sec 記憶體限制 128 mb 題目描述 設有n個大小不等的中空圓盤,按從小到大的順序從1到n編號。將這n個圓盤任意的 迭套在三根立柱上,立柱的編號分別為a b c,這個狀態稱為初始狀態。現在要求找到一種步數最少的移動方案,使得從初始狀態轉變為目標狀態。移動時有如下要求 一次只能移乙...