飛行機の移動が暇なので蟻本を読んでまとめることにしました。
今回は組み合わせ問題編です。
分割数
問題
個の互いに区別できない品物を
個以下に分割する方法の場合の数を
で割ったあまりを求めよ。
たとえば、4つの品物を(1, 1, 2)と分割するのと(1, 2, 1)と分割するのは同じ分割だと数えます。
解法
mod素数の場合、combinationがで求められることにより、事前計算も込みで
で解くことができます。
modが素数でない場合は、コンビネーション計算時に逆元が求まらないので、DPをします。
番目までの品物をちょうど
個に分割する分割数とします。
ちょうど個に分割する方法は、
番目までの品物が
個に分割されていて
番目の品物を別の1グループとする場合と、
番目までの品物が
グループに分割されていて、i番目の品物をどれかに追加する、という場合になります。
したがって、となります。
こうして
でこの問題が解けました。
重複組合せ
種類の品物があり、
番目の品物は
個あります。異なる種類の品物は区別できますが、同じ種類の品物は区別できません。これらの品物の中から
個選ぶ組み合わせの総数を
で割った値を答えなさい。
解法
種類目までから
個選ぶ組み合わせというDPを考えます。この数え上げを、
種類目のものを選ぶ場合とそうでない場合に分けて考えます。
種類目のものを選ばない場合は
通りですね。
種類目のものを1つ以上選ぶ場合、
通りです。これは累積和を同時に求めながら計算すると
で計算できます(蟻本にはp.67にはこれを上手く変形して累積和なしで計算する方法も載ってあります)。