二項係数の式変形について
ここであまり得意でないパターンの問題が出てきたのでメモです。DEGwerさんの数え上げPDFなんかにはいろんな種類が載っているので、また出てきたら追加します。数式をごちゃごちゃいじるとできるパターンもそのうち載せたいです。
について計算をしたい、とします。
これは、一回の移動でだけ移動できるとしたときの、座標からへの最短移動経路の経路数です。
について計算します。
これは、座標からへの最短経路の場合の数を、について足し合わせたものです。
上の(適当な)図の、水色が今求めたい部分です。その上の行にある、黄色く塗られた部分のマスについて注目します。
水色のマスに行くには、まず黄色のマスの少なくとも1つを通らなければ、たどり着くことはできません。そして、赤い矢印のうちいずれか1つを必ず通ります。しかも、2本以上その矢印を通ることはありません。矢印を通った後は、水色のマスにたどり着くまでひたすら右に進む必要があります。
つまり、赤い矢印それぞれについて経路が重複することはないため、それぞれの赤い矢印について、そこを通る経路数を計算し、その総和を求めれば、それが水色のマスへの経路数になります。
そして、赤い矢印を通る経路数は、赤い矢印の始点である黄色いマスの経路数そのものです(からの矢印ならば、の経路数である)。よって、結果として矢印の経路数の総和である水色のマスの経路数は、
となりました。
例題(ABC154 F - Many Many Paths)
を求める問題です。
式変形をすると、
となり、ここでを使うと、
になります。これで計算量が落ち、答えを求めることができます。
(のときのため)
(少し展開してを削除)
(を外にだす)
(再びまとめる)
(をΣの外に出し、を0-indexedに直す)
(二項定理)
となります。
例題(ABC 150 E - Change a Little Bit)
提出コード
できるだけコストの小さいものから使用していくのが良いです。ということで、今回は全パターンの総和を求めるため、の順番を変えても差し支えないことから、を昇順でソートします。今後、は0-indexedだとします。
番目のビットを変化させるとします。このとき、問題文にも書いてあるように、残っている個数をとすると、のコストがかかります。
より小さい番号のビットはともにそろっているとします。これらはビット存在し、元々のビットパターンがの4通りなので、この部分は通り存在します。
番目のビットは、の2通り存在します。
さて、より後ろの部分は、ビット存在します。
この中で、ビットがで異なっているとします。ビットは初めからそろっていることになります。
そろっているビットはの2通り、異なるビットもの2通りです。ということで、ビットの組み合わせ自体は通りです。そして、ビットの中から、現在異なっているビットを選ぶのは、通りとなります。
そして、このときにコストはかかります。
については、の選び方があり、それぞれ総和を求めていかなければなりません。
長々と条件を書きましたが、これらを全てまとめて書くと、
2の累乗とを外に出してまとめると、
となります。さらにの部分を分配法則を用いて変形し、
*
とすると、および、二項定理から、
となります。これで計算量が落ち、答えを求めることができます。