1. 程式人生 > >【模板】第二類斯特林數Stirling

【模板】第二類斯特林數Stirling

pre ble 出發 ati val span 兩種 定義 技術

第二類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

【模板】第二類斯特林數Stirling