信息学奥赛一本通 1315:【例4.5】集合的划分
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1315:【例4.5】集合的划分
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1315:【例4.5】集合的劃分
【題目考點】
1. 遞歸/遞推
2. 第二類斯特林數(shù)
【解題思路】
本題為求第二類斯特林數(shù)。
該問題可以描述為:將n個不相同的球放入k個相同的盒子,沒有空盒子,求方案數(shù)。
解法1: 遞推
- 遞推狀態(tài):s[i][j]表示將i個不相同的球放入j個盒子的方案數(shù)
- 遞推關系:
(1) 將前i-1個球放入j個盒子,沒有空盒,有s[i-1][j]種情況,每種情況下,第i個球可以放入j個盒子中的任意一個,有j*s[i-1][j]種情況。
(2) i-1個球放入j-1個盒子,留下1個空盒給第i個球,有s[i-1][j-1]種情況
所以將i個不相同的球放入j個盒子的方案數(shù)為s[i][j] = s[i-1][j-1] + j*s[i-1][j] - 初始狀態(tài):
(1) i個球放進j個盒子,當盒子數(shù)大于球數(shù)時,一定存在空盒,不存在擺放方案。所以一定有i >= j
(2) i個球放進1個盒子,只有1種方案 s[i][1] = 1
2. 遞歸求解
- 遞歸問題:求將i個不相同的球放入j個盒子的方案數(shù),記為s(i, j)
- 遞歸關系:要想將i個不相同的球放入j個盒子,有以下兩種放法:
(1) 先將前i-1個球放入j個盒子,沒有空盒,有s(i-1, j)種情況,每種情況下,第i個球可以放入j個盒子中的任意一個,共有j*s(i-1, j)種情況。
(2) 將i-1個球放入j-1個盒子,留下1個空盒給第i個球,共有s(i-1, j-1)種情況 。 - 遞歸出口:
(1) i個球放進j個盒子,當盒子數(shù)大于球數(shù)時,一定存在空盒,不存在擺放方案。所以當i < j時,方案數(shù)s(i, j)為0。
(2) i個球放進1個盒子,只有1種方案 s(i, 1)為1
注意:結果會很大,要設成long long類型。
【題解代碼】
解法1: 遞推
#include<bits/stdc++.h> using namespace std; long long s[40][40];//s[i][j]:將i個球裝j個盒子的情況數(shù)。 int main() {int n, k; cin >> n >> k;for(int i = 1; i <= n; ++i)//球數(shù) for(int j = 1; j <= i && j <= k; ++j)//盒子數(shù),不會比球數(shù)多 {if(j == 1)s[i][j] = 1;elses[i][j] = s[i-1][j-1] + j*s[i-1][j];}cout << s[n][k];return 0; }解法2: 遞歸
#include<bits/stdc++.h> using namespace std; long long stirling(int i, int j)//求將i個不相同的球放入j個盒子的方案數(shù) {if(j > i)return 0;else if(j == 1)return 1;elsereturn stirling(i-1, j-1) + j*stirling(i-1, j); } int main() {int n, k; cin >> n >> k;cout << stirling(n, k);return 0; }解法3: 記憶化遞歸
#include<bits/stdc++.h> using namespace std; long long s[40][40];//s[i][j]:將i個球裝j個盒子的情況數(shù)。 long long stirling(int i, int j)//求將i個不相同的球放入j個盒子的方案數(shù) {if(s[i][j] > 0)return s[i][j];if(j > i)return 0;else if(j == 1)return 1;elsereturn s[i][j] = stirling(i-1, j-1) + j*stirling(i-1, j); } int main() {int n, k; cin >> n >> k;cout << stirling(n, k);return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1315:【例4.5】集合的划分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenJudge NOI 1.8 25
- 下一篇: 信息学奥赛一本通 1175:除以13 |