【模板】第二類斯特林數Stirling
阿新 • • 發佈:2017-10-16
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