水銀メモ_________φ

外部記憶装置として再開

CodeForces #309_Div1 : A. Kyoya and Colored Balls

http://codeforces.com/contest/553/problem/A

問題

1kまでナンバリングされたボールがそれぞれc_i個与えらえる。
これらのボールを全て並べたとき、color(i)の中で右端に存在するボールよりも右側に
color(1)〜color(i-1)が存在しないような並べ方が何通りあるか求めよ。

解法

ナンバーの小さい順にボールを配置していく。
color(i)を配置する際、最も右側に存在するcolor(i)よりも右側にcolor(1)〜color(i-1)
存在してはいけないので、まずcolor(i)のうち1つを右端に配置する。
残りのc_i -1個のボールを、既に配置されているボールの隙間に重複を許して配置すれば良い。
例えば以下の例で、c_3=3を追加したい場合  _5H_2を計算する。 f:id:suigingin:20160404011004p:plain

重複組み合わせについては hosさんのスライド が分かりやすいと思う。
ボールの総数が1000を超えないためコンビネーションの計算にパスカルの三角形を使用できる。

コード