C(A,B+A)
∏c(mi,n)
1 #include <bits/stdc++.h> 2 #define nmax 2200 3 #define mod 1000000007 4 5 using namespace std; 6 typedef long long ll; 7 int n,m,in; 8 ll c[nmax][nmax]={0}; 9 ll x[nmax]; //x[i]表示把这些特产只分给i个学生 10 11 void pre(){ //a^b 12 for (int i=0; i<nmax; i++) c[i][0]=1; 13 for (int i=1; i<nmax; i++) { 14 for (int j=1; j<i; j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod; 15 c[i][i]=1; 16 } 17 } 18 19 int main(){ 20 pre(); 21 cin>>n>>m; 22 for (int j=1; j<=n; j++) x[j]=1; 23 for (int i=0; i<m; i++) { 24 scanf("%d",&in); 25 for (int j=2; j<=n; j++) { //枚举学生 26 x[j]*=c[in+j-1][j-1]; 27 x[j]%=mod; 28 } 29 } 30 for (int j=1; j<=n; j++) { x[j]*=c[n][n-j]; x[j]%=mod; } 31 //容斥原理 32 ll ans=0; 33 for (int i=n; i>=1; i--) { 34 if( (n-i)&1 ) ans-=x[i]; else ans+=x[i]; 35 ans+=mod; 36 ans%=mod; 37 } 38 cout<<ans<<endl; 39 return 0; 40 }
BZOJ4710: [Jsoi2011]分特产 组合数学 容斥原理
原文:https://www.cnblogs.com/jiecaoer/p/11474015.html