第一类斯特林数:
1.有正负
2.其绝对值是包含n个元素的集合分作k个环排列的方法数目。
递推公式:
S(n,0)=0;
S(1,1)=1;
S(n+1,k)=S(n,k-1)+n*S(n,k);
证明:
#hdu4372
WA的原因,应该是从b+f-2个环中选出b-1放在后面,而不是n-1中选。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll S[2010][2010],C[2010][2010];
void init()//斯特林数的推导公式
{
for(int i=1;i<=2000;i++)
{
S[i][0]=0;//边界条件
S[i][i]=1;//边界条件
for(int j=1;j<i;j++)
S[i][j]=(S[i-1][j-1]%mod+((i-1)*S[i-1][j]%mod))%mod;
}
for(int i=0;i<=2000;i++)//杨辉三角
{
C[i][0]=C[i][i]=1;
for(int j=1;j<=i;j++)
C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
}
}
int main()
{
int n,b,f,t;
init();
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&f,&b);
printf("%lld\n",S[n-1][f-1+b-1]*C[f+b-2][b-1]%mod);
}
return 0;
}