• 【算法】第二类斯特林数Stirling


    第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数,记为 或者 。

    第二类Stirling数的推导和第一类Stirling数类似,可以从定义出发考虑第n+1个元素的情况,假设要把n+1个元素分成m个集合则分析如下:
    (1)如果n个元素构成了m-1个集合,那么第n+1个元素单独构成一个集合。方案数 。
    (2)如果n个元素已经构成了m个集合,将第n+1个元素插入到任意一个集合。方案数 m*S(n,m) 。
     
    综合两种情况得:
     
     
    递推式:dp[i][j] = dp[i-1][j-1]+j*dp[i-1][j];
     
     
     
    模板代码:
          dp[0][0] = 1;
            for(int i = 1;i <= n; i++){
                for(int j = 1;j <= i; j++){
                        dp[i][j] = dp[i-1][j-1]+j*dp[i-1][j];
                }
            } 

     

    n=0 1
    n=1 0 1
    n=2 0 1 1
    n=3
    0 1 3 1
    n=4
    0 1 7 6 1
    n=5
    0 1 15 25 10 1
    n=6
    0 1 31 90 65 15 1
    n=7
    0 1 63 301 350 140 21 1
    n=8
    0 1 127 966 1701 1050 266 28 1
    n=9
    0 1 255 3025 7770 6951 2646 462 36 1
     
  • 相关阅读:
    数据结构
    类加载器介绍
    算法复杂度
    PHP代码审计分段讲解(5)
    PHP代码审计分段讲解(4)
    SQLMap使用指北
    PHP代码审计分段讲解(3)
    PHP代码审计分段讲解(1)
    Nmap学习使用指南
    Python Flask后端异步处理(三)
  • 原文地址:https://www.cnblogs.com/zhangjiuding/p/7674885.html
Copyright © 2020-2023  润新知