No.020 D

を町 と町 をつなぐ道とする.

を通るということは, 以下の町から 以上の町を移動するということである.

そこで, 以下の町を , 以下の町を として訪れる順序を並べた2進数の数値 を考える. 例えば道 について, と町を訪れたとすると, となる. ビット目と ビット目が違うならば道 を通るということになる. この数値から出される道 の通過回数を とおく.

ここで, 道 まで見たときに訪れる順序を並べた2進数が になり, そこまでの移動距離の合計を で割った余りが となる組み合わせを として, これを更新していく.

番目の道において ビット目を にするということは, 町 番目に訪問するということであり, ビット目を にした値を とする. そうすると,

となる. また, 番目の町を訪問しないという選択肢もあるので,

となる.