第一类斯特林数:
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;
}