日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[UOJ #167]【UR #11】元旦老人与汉诺塔

發(fā)布時(shí)間:2024/4/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [UOJ #167]【UR #11】元旦老人与汉诺塔 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目大意:給你一個(gè)有$n$個(gè)盤子的漢諾塔狀態(tài)$S$,問(wèn)有多少種不同的操作方法,使得可以在$m$步以內(nèi)到達(dá)狀態(tài)$T$。$n,m\leqslant100$

題解:首先可以知道的是,一個(gè)狀態(tài)最多可以轉(zhuǎn)移到其他的$3$個(gè)狀態(tài),然后發(fā)現(xiàn)若$m\leqslant100$的話,每個(gè)柱子最多移動(dòng)$7$個(gè)盤子,所以最多狀態(tài)只有$3^{21}$次,這個(gè)數(shù)可能有點(diǎn)大,但是通過(guò)更嚴(yán)密的分析的話,最后狀態(tài)數(shù)只有$10^5$級(jí)別,可以通過(guò)記憶化搜索通過(guò)。

卡點(diǎn):媽啊,我怎么又把柱子上的順序弄反了

?

C++ Code:

#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <map> const int mod = 998244353; inline void reduce(int &x) { x += x >> 31 & mod; }int n, m, ans; std::vector<int> S, T, v[3]; std::map<std::vector<int>, int> f[105]; int dfs(int x, std::vector<int> S, std::vector<int> *v) {if (f[x].count(S)) return f[x][S];if (!x) return 0;int &F = f[x][S];for (int i = 0; i < 3; ++i) if (v[i].size())for (int j = 0; j < 3; ++j)if (!v[j].size() || v[i].back() < v[j].back()) {S[v[i].back()] = j;v[j].push_back(v[i].back()), v[i].pop_back();reduce(F += dfs(x - 1, S, v) - mod);S[v[j].back()] = i;v[i].push_back(v[j].back()), v[j].pop_back();}return F; } int main() {std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);std::cin >> n >> m;for (int i = 0, x; i < n; ++i) std::cin >> x, S.push_back(--x);for (int i = 0, x; i < n; ++i) std::cin >> x, T.push_back(--x);for (int i = n - 1; ~i; --i) v[T[i]].push_back(i);f[0][S] = 1;for (int i = 0; i <= m; ++i) reduce(ans += dfs(i, T, v) - mod);std::cout << ans << '\n';return 0; }

  

轉(zhuǎn)載于:https://www.cnblogs.com/Memory-of-winter/p/11354382.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的[UOJ #167]【UR #11】元旦老人与汉诺塔的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。