斯特林数,贝尔数

第一类斯特林数:

s (n,m)表示把n 个元素划分为m 个非空循环排列集合的方案数。

递推式:s(n,m)=s(n−1,m−1)+(n−1)∗s(n−1,m)

const ll maxn=20;
ll stirling[maxn][maxn];
void Stirling()
{
    stirling[0][0]=0,stirling[1][1]=1;
    for(ll i=2;i<maxn;i++)
     for(ll j=1;j<=i;j++)
      stirling[i][j]=stirling[i-1][j-1]+(i-1)*stirling[i-1][j];
}

第二类斯特林数:

s(n,m)表示把n 个元素划分为m 个非空集合的方案数。

递推式:s​(n,m)=s​(n−1,m−1)+m∗s​(n−1,m)

const ll maxn=20;
ll stirling[maxn][maxn];
void Stirling()
{
    stirling[0][0]=0,stirling[1][1]=1;
    for(ll i=2;i<maxn;i++)
     for(ll j=1;j<=i;j++)
      stirling[i][j]=stirling[i-1][j-1]+j*stirling[i-1][j];
}

贝尔数:

B(n)表示把n个元素划分成若干个非空集合的方案数。

第二类斯特林数求和

const ll maxn=20;
ll bell[maxn];
void Bell()
{
    ll t[maxn];
    bell[0]=bell[1]=1;t[0]=1;
    for(int i=2;i<maxn;i++)
    {
        t[i-1]=bell[i-1];
        for(int j=i-2;j>=0;j--) t[j]=t[j+1]+t[j];
        bell[i]=t[0];
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值