跳转至

斯特林数

#include<bits/stdc++.h>
#define Maxn 1000
using namespace std;
int dp[Maxn+5][Maxn+5];
void init(int n,int Mod)
{
    //第一类斯特林数:n个不同小球放入k个环里的方案数
    dp[0][0]=dp[1][1]=1;
    for(int i=2;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            dp[i][j]=((i-1)*dp[i-1][j]+dp[i-1][j-1])%Mod;
        }
    }
    //第二类斯特林数:n个不同的小球放入k个非空集合的方案数
    dp[0][0]=dp[1][1]=1;
    for(int i=2;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            dp[i][j]=(j*dp[i-1][j]+dp[i-1][j-1])%Mod;
        }
    }
}
int main()
{
    init(1000,1000000);
    return 0;
}