考虑至少有
x
x
x个人没分到特产的方案:那就是把
a
[
i
]
a[i]
a[i]个特产分给
n
−
x
n-x
n−x个人,方案数就是
C
n
−
x
+
a
[
i
]
−
1
n
−
x
−
1
C^{n-x-1}_{n-x+a[i]-1}
Cn−x+a[i]−1n−x−1。选定这
x
x
x个人的方案数是
C
n
i
C^{i}_{n}
Cni。那么总方案数就是这两个东西相乘。
那么就可以容斥去求解了。
c
o
d
e
:
code:
code:
#include <bits/stdc++.h>
#define int long long
#define mod 1000000007
int n,m,ans;
int c[2005][2005];
int a[2005];
int ksm(int x,int y,int z=1){
for(;y;(z*=y&1?x:1)%=mod,y>>=1,(x*=x)%=mod);
return z;
}
main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
scanf("%d",&a[i]);
for(int i=0;i<=2000;i++)
c[i][i]=c[i][0]=1;
for(int i=1;i<=2000;i++)
for(int j=1;j<=i;j++)
c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
for(int i=0;i<=n-1;i++){
int cnt=1;
for(int j=1;j<=m;j++)
(cnt*=c[n+a[j]-i-1][n-i-1])%=mod;
if(i&1)
((ans-=cnt*c[n][i]%mod)+=mod)%=mod;
else
(ans+=cnt*c[n][i]%mod)%=mod;
}
printf("%d\n",ans);
return 0;
}