洛谷 4285 SHOI 漢諾塔

2021-09-25 08:29:19 字數 780 閱讀 7780

這道題我到現在也沒有全懂,只能大概理解一下思路

首先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的話,先把最後乙個移到z,然後把先把x移到y再移到z,

就是f[x][i - 1] + 1 + f[y][i - 1] + 1,g[x][i] = z表示這次最優是從x到z

如果上一次最優是g[y][i - 1] 到 x,說明要先把x移到y,再把第i個移到z去,然後最優y再移到x,再把第i個移到y來,再把x再移到y

f[x][i - 1] + 1 + f[y][i - 1] + f[x][i - 1]

最後輸出f[1][n]表示1在n層移到最優解

上**

#include#define ll long long

using namespace std;

const int m = 30;

ll f[m + 5][m + 5];

int p[m + 5][m + 5];

string s[m + 5];

int main()

} }for(int i = 2;i <= n;i ++)

else if(p[b][i - 1] == a)

}} cout << f[1][n];

return 0;

}

洛谷P1242 新漢諾塔

首先要將第n個盤子從x到y,那麼就要把比n小的盤子全部移到6 x y,然後將n移到y 仔細想想 6代表的是3根初始柱,3根目標柱。6 x y 便是我們的中轉柱了,因為到這個位置是最優的。感覺題目有鍋啊。include include include include using namespace s...

dfs 洛谷 P1242 新漢諾塔

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

洛谷 P1760 通天之漢諾塔

直達通天路 小a歷險記第四篇 在你的幫助下,小a成功收集到了寶貴的資料,他終於來到了傳說中連線通天路的通天山。但是這距離通天路仍然有一段距離,但是小a突然發現他沒有地圖!但是幸運的是,他在山腳下發現了乙個寶箱。根據經驗判斷 小a有經驗嗎?地圖應該就在其中!在寶箱上,有三根柱子以及在一根柱子上的n個圓...