9409 集合的劃分問題

2021-09-28 10:05:21 字數 1322 閱讀 2418

time limit: 3 second

memory limit: 2 mb

問題描述:

n 個元素的集合可以劃分為若干個非空子集。例如,當n=4 時,集合可以劃分為15 個不同的非空子集如下:

,,,}, 

,,}, 

,,}, 

,,}, 

,,}, 

,,}, 

,,}, 

,}, 

,}, 

,}, 

,}, 

,}, 

,}, 

,}, 

} 其中,集合} 由1 個子集組成;集合,},,},,},,},,},,},,} 由2 個子集組成;集合,,},,,},, ,},,,},,,},,,} 由3 個子集組成;集合,,,} 由4 個子集組成。 

程式設計任務:

給定正整數n 和m,計算出n 個元素的集合可以劃分為多少個不同的由m 個非空子集組成的集合。

>

輸入檔案僅一行,輸入元素個數n 和非空子集數m。

將計算出的不同的由m個非空子集組成的集合數

4 3
6
【題解】

對於集合的第n個元素。它有兩種情況。第一種,自身乙個元素作為集合。第二種,與其他元素合在乙個集合中。

對於第一種情況。問題轉化為n-1個元素。劃分為m-1個集合的情況。

對於第二種情況。問題轉化為n-1個元素。劃分為m個集合的情況。然後第n個元素可以加入到前n-1個元素組成的m個集合中的任意乙個集合。

即f[n][m] = f[n-1][m-1]+f[n-1][m]*m;

當n==m時f[n][m] = 1;

當m>n時,f[n][m]=0;

當m < 1時,f[n][m]==0(當然 如果n==m==0則f[n][m] = 1)

不用擔心這樣組成的集合會重複。

因為只有後面的元素才會主動去找前面的元素構成集合。前面的元素是不會主動找到後面的元素的!這就滿足了組合的定義。

假設xy選擇與前面的元素構成集合。

x選擇自身乙個元素。

那麼這時x就不是自身乙個了。可以是x和y在一起。

但是不用擔心x不能選擇自身乙個。

因為y也可以選擇是自身乙個。這種情況下。

x也就可以選擇自身乙個了。

就這樣吧。不要去鑽牛角尖。要大膽地想。

【**】

#include int nn, mm;

void input_data()

__int64 stirling(int n, int m)

int main()

2 7 集合劃分問題

問題描述 n 個元素的集合可以劃分為若干個非空子集。例如,當 n 4 時,集合可以劃分為 15 個不同的非空子集如下 程式設計任務 給定正整數 n,計算出 n 個元素的集合可以劃分為多少個不同的非空子集。資料輸入 由檔案 input.txt 提供輸入資料。檔案的第 1 行是元素個數 n。結果輸出 程...

例4 5 集合的劃分

時間限制 1000 ms 記憶體限制 65536 kb 提交數 218 通過數 158 題目描述 設s是乙個具有n個元素的集合,s 現將s劃分成k個滿足下列條件的子集合s1,s2,sk 且滿足 1 si 2 si sj 1 i,j k i j 3 s1 s2 s3 sk s 則稱s1,s2,sk是集...

2 8 集合劃分問題 給定要分成幾個集合

問題描述 n 個元素的集合可以劃分為若干個非空子集。例如,當 n 4 時,集合可以劃分為 15 個不同的非空子集如下 其中,集合 由 1 個子集組成 集合,由 2 個子集組成 集合,由 3 個子集組 成 集合,由 4 個子集組成。程式設計任務 給定正整數 n 和 m,計算出 n 個元素的集合可以劃分...