const int N =5000;
const int mod =(int)1e9+7;
int comb[N][N];
void init()//当总数较小时可以用组合数公式求得
{
for(int i=0;i<N;i++)
{
comb[i][0]=comb[i][i]=1;
for(int j=1;j<i;j++)
{
comb[i][j]=comb[i-1][j]+comb[i-1][j-1];
comb[i][j]%=mod;
}
}
}
当n较大时可以用逆元来算
const int N =5000;
const int mod =(int)1e9+7;
int comb[N][N];
int f[N],finv[N],inv[N];//f中存的是阶乘,finv中存的是逆元的阶乘(分母)
void init()
{
inv[1]=1;
for(int i=2;i<N;i++)
{
inv[i]=(mod-mod/i)*1ll*inv[mod%i]%mod;
}
f[0]=finv[0]=1;
for(int i=1;i<N;i++)
{
f[i]=f[i-1]*1ll*i%mod;
finv[i]=finv[i-1]*1ll*inv[i]%mod;
}
}
int cal(int n,int m)
{
if(m<0||m>n)return 0;
return f[n]*1ll*finv[n-m]%mod*finv[m]%mod;
}