首先要將第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,這個狀態稱為初始狀態。現在要求找到一種步數最少的移動方案,使得從初始狀態轉變為目標狀態。移動時有如下要求 一次只能移乙...