問題の解決策:https://blog.csdn.net/qq_40655981/article/details/104459253
効果の件名:n個の部屋には,,各部屋には人を持って、k個の日数の合計は、1日、人はどの部屋に行くことができます。N状態がありますどのように多くの部屋尋ねます。
皆アップN-1ベッドルームを選択するため、K場合> = N-1、結果はC(N + M-1、N-1)であり、C(N + N-1であり、ボールボックスモデルに類似していますN-1)。
kは<N-1は、確かに存在するであろう場合、N-1-kの個体は移動できません。我々は、ラインの合計は、個体は、x〜、Xと移動しない満たされていない(1、N-1-k)の条件が満たされない差し引きます。
Cは、(その後、車輪の確率は私のように、学ぶことがなかった、理解していない)(N、X)* C(N-1、X-1)の条件を満たしていない計算されます。
コード
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 typedefの長い 長いLL。 CONST LL MOD = 1E9 + 7 。 LL KSM(LL X、LLのY){ LL RES = 1 。 一方、(Y){ 場合(Y&1)RES = RES * X%MOD。 X = X * X%MOD。 Y >> = 1 。 } 戻り RES%MOD。 } LL CAL(LL N、LL M){ LL SUM1 = 1 。 LL SUM2 = 1 。 以下のための(iは= LL 1、I <= M; I ++)SUM1 = SUM1 * I%MOD。 以下のための(iはN = LL; I> = N-M + 1 ; i--)SUM2 = SUM2を* I%MOD。 戻り SUM2 * KSM(SUM1、mod- 2)%のMOD。 } int型 のmain(){ LL N、K。 CIN >> N >> K。 もし(NK <= 1)COUT << CAL(2 * N- 1、N- 1)%のMOD << ENDL。 他{ LLトール = CAL(2 * N- 1、N- 1)%のMOD。 LL TMP1CAL =(N、1)%のV。 LL TMP 2 = 1 。 トール =(トールTMP 1 TMP 2%* V + V)%のV。 ため(II私は= 2、I <NK; I ++ ){ TMP1 = TMP1 *(N-iは、+ 1)%のV。 TMP1 = TMP1 KSM *(I、カウンタ2)%のV。 TMP 2 = TMP 2 *(N-I + 1)%のV。 TMP 2 = TMP 2 KSM *(I- 1、MOD 2)%のV。 トール =(トールTMP 1 TMP 2%* V + V)%のV。 } coutの <<トール<< てendl; } 戻り 0 。 }