G45 第一类斯特林数 斯特林轮换数
视频链接:https://www.bilibili.com/video/BV1Ms4y1t7JB/
#include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=50010, M=210, P=1e9+7; long long S[N][M], C[M][M]; void init(){ S[0][0]=1; for(int i=1; i<N; i++) for(int j=1; j<M; j++) S[i][j]=(S[i-1][j-1]+(i-1)*S[i-1][j])%P; for(int i=0; i<M; i++) C[i][0]=1; for(int i=1; i<M; i++) for(int j=1; j<=i; j++) C[i][j]=(C[i-1][j-1]+C[i-1][j])%P; } int main(){ init(); int T, n, a, b, ans; scanf("%d", &T); while(T--){ scanf("%d%d%d", &n, &a, &b); ans=S[n-1][a+b-2]*C[a+b-2][a-1]%P; printf("%d\n", ans); } }