以下の内容はhttps://emtubasa.hateblo.jp/entry/2018/12/20/000000より取得しました。


ABC073 D - joisino's travel

問題
提出コード
典型+久々につかう知識問題。

解法

まずは、頂点数が200しかないので、O(N^3)が間に合います。ので、とりあえずワーシャルフロイド法を適用し、それぞれの頂点間の距離の最小値を求めておきます。
そして、通りたい頂点数は8しかないので、全探索が間に合います。ので、c++であれば、next_permutationを利用して、順列を1つ1つ作成し、その順番に頂点を通った場合の距離を先ほどのワーシャルフロイド法によって求めた値から計算して、最小値の更新を行っていけば、答えがもとまります。
next_permutationを行うときはdo-while文を利用するといいかと思います。通る頂点をあらかじめ昇順でソートしておくことや、ワーシャルフロイド法を適用するにあたって初期化が\inftyであること、0-indexedか1-indexedかの確認など、基本的な部分に注意しましょう。




以上の内容はhttps://emtubasa.hateblo.jp/entry/2018/12/20/000000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14