hdu - 2512 一卡通大冒险 (斯特灵数 贝尔数)
生活随笔
收集整理的這篇文章主要介紹了
hdu - 2512 一卡通大冒险 (斯特灵数 贝尔数)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://acm.hdu.edu.cn/showproblem.php?pid=2512? ??
/** 題意:給你k張不同的卡放到n本書里有多少種放法?(n是無限大) 典型的 斯特靈數第二類 +貝爾數 斯特靈數:如:給你k張牌放到n個無標號的盤子里(盤子不能為空)問你有多少種方法; Stirling[i][j] = Stirling[i-1][j-1] + j * Stirling[i-1][j] 表示前i張牌放到j個盤子里的方法數可以由前i-1張牌放到j-1個盤子里的方法數(相當于在其后加一張牌一個盤子) + 前i-1張牌放到j個盤子里(再加一張牌可以放到j個盤子里) * j ; 貝爾數:就是斯特靈數的和(即所求值) **/ #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int Stirling[20005][20005]; int Bell[2005]; void init(){for(int i = 1;i <= 2000;i++)//斯特靈數{Stirling[i][i] = 1;for(int j = 1;j < i;j++){Stirling[i][j] = (Stirling[i-1][j-1] + Stirling[i-1][j] * j)%1000;}}for(int i = 1;i <= 2000;i++)//貝爾數{for(int j = 1;j <= i;j++)Bell[i] = (Bell[i] + Stirling[i][j]) % 1000;} } int main(){init();int t;cin >> t;int n;while(t--){cin >> n;cout << Bell[n] << endl;} }
斯特靈數第一類:
第一類:n個元素分成k個非空循環排列(環)的方法總數
遞推式:s(n+1,k)=s(n,k-1)+n*s(n,k)
解釋:考慮第n+1個元素 1、單獨形成循環排列,剩下的有s(n,k-1)種方法 2、和別的元素一起形成循環排列,n個元素形成循環排列的方法數是s(n,k),第n+1個可以放在第i個元素左邊,共有n種放法,一共是n*s(n,k);
code : 如第二類相似
轉: http://www.cnblogs.com/xiaohongmao/p/3645517.html總結
以上是生活随笔為你收集整理的hdu - 2512 一卡通大冒险 (斯特灵数 贝尔数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 收藏!架构师需要掌握的99条铁律
- 下一篇: 1951: [Sdoi2010]古代猪文