當(dāng)前位置:
首頁(yè) >
hdu - 2512 一卡通大冒险 (斯特灵数 贝尔数)
發(fā)布時(shí)間:2025/3/16
40
豆豆
生活随笔
收集整理的這篇文章主要介紹了
hdu - 2512 一卡通大冒险 (斯特灵数 贝尔数)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://acm.hdu.edu.cn/showproblem.php?pid=2512? ??
/** 題意:給你k張不同的卡放到n本書里有多少種放法?(n是無(wú)限大) 典型的 斯特靈數(shù)第二類 +貝爾數(shù) 斯特靈數(shù):如:給你k張牌放到n個(gè)無(wú)標(biāo)號(hào)的盤子里(盤子不能為空)問(wèn)你有多少種方法; Stirling[i][j] = Stirling[i-1][j-1] + j * Stirling[i-1][j] 表示前i張牌放到j(luò)個(gè)盤子里的方法數(shù)可以由前i-1張牌放到j(luò)-1個(gè)盤子里的方法數(shù)(相當(dāng)于在其后加一張牌一個(gè)盤子) + 前i-1張牌放到j(luò)個(gè)盤子里(再加一張牌可以放到j(luò)個(gè)盤子里) * j ; 貝爾數(shù):就是斯特靈數(shù)的和(即所求值) **/ #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++)//斯特靈數(shù){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++)//貝爾數(shù){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;} }
斯特靈數(shù)第一類:
第一類:n個(gè)元素分成k個(gè)非空循環(huán)排列(環(huán))的方法總數(shù)
遞推式:s(n+1,k)=s(n,k-1)+n*s(n,k)
解釋:考慮第n+1個(gè)元素 1、單獨(dú)形成循環(huán)排列,剩下的有s(n,k-1)種方法 2、和別的元素一起形成循環(huán)排列,n個(gè)元素形成循環(huán)排列的方法數(shù)是s(n,k),第n+1個(gè)可以放在第i個(gè)元素左邊,共有n種放法,一共是n*s(n,k);
code : 如第二類相似
轉(zhuǎn): http://www.cnblogs.com/xiaohongmao/p/3645517.html總結(jié)
以上是生活随笔為你收集整理的hdu - 2512 一卡通大冒险 (斯特灵数 贝尔数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 收藏!架构师需要掌握的99条铁律
- 下一篇: 1951: [Sdoi2010]古代猪文