ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

ABC231 G - Balls in Boxes

問題
提出コード

解法

\prod _{i = 1}^{N} B_{i}の総和を求めて、最後に全パターン数N^{k}で割れば答えです。総和の求め方について考えていきます。

\prod _{i = 1}^{N} B_{i}は、N個の箱にあるボールB_{i}個からそれぞれ1個ずつ選ぶパターン数と一致します。
 \prod_{i =1}^{N}\ _{B_{i}}C_{1}ということです。

i個目の箱にあるボールB_{i}からボールを選ぶパターンは2パターンあります。
最初から入っているA_{i}個のボールを選ぶパターンと、新しく追加されたB_{i} - A_{i}個のボールを選ぶパターンです。
前者は明らかにA_{i}通りです。

N個の箱の中で、前者を選ぶグループを決めていきます。すると、前者を選んだ箱pにおける\prod A_{p}に、K回のボールの入れ方、および後者を選んだ箱のボールの選び方をかけたものを足していけば答えです。
新しく追加するボールの入れ方や選び方は、前者を選んだ数に依存します。なので、\prod A_{p}をあらかじめまとめて足しておきます。
これは、

  • dp[i][j] = i番目の箱までみて、j個の箱を前者として選んだ状態における、\prod A_{p}の総和

として計算していくことができます。

では、dp[N][i]にかけるべき数を計算していきます。やることは2つで、

  1. K個のボールのうち、N-i個の選ばれるべきボールの位置を決める

  2. 残ったボールを箱に振り分ける

です。

1つめについて考えます。まだ選ばれてない箱の番号が\{a,b,c\}だったとします。この時、K回の操作のうち3つをとってきて並べた列\{x,y,z\}を作ると、前から順番にa,b,cに割り当てることで、過不足なく数えることができます。つまり、K個の中からN-i個選んで並べるパターン数になり、\ _{K}P_{N-i}となります。

あとは2つめの操作です。残っているボールは、どの箱に割り当てても問題ありません。なので、残っているボールの手前から順に、N個の箱の中から1つ選んでいけばよいので、N^{K- (N-i)}が答えです。

よって、dp[N][i] \times\ _{K}P_{N-i}\times N^{K- (N-i)}を計算して足していけば答えになります。

感想

\prod _{i = 1}^{N} B_{i}をボールの選び方に帰着させる問題は今まで解けたことがなかったので、今回初めて解けてうれしいです。