No.020 D
道 を町 と町 をつなぐ道とする.
道 を通るということは, 以下の町から 以上の町を移動するということである.
そこで, 以下の町を , 以下の町を として訪れる順序を並べた2進数の数値 を考える. 例えば道 について, と町を訪れたとすると, となる. の ビット目と ビット目が違うならば道 を通るということになる. この数値から出される道 の通過回数を とおく.
ここで, 道 まで見たときに訪れる順序を並べた2進数が になり, そこまでの移動距離の合計を で割った余りが となる組み合わせを として, これを更新していく.
番目の道において の ビット目を にするということは, 町 を 番目に訪問するということであり, ビット目を にした値を とする. そうすると,
となる. また, 番目の町を訪問しないという選択肢もあるので,
となる.