集合的劃分 遞推)

2021-08-31 14:01:21 字數 1024 閱讀 1856

時間限制: 1 sec  記憶體限制: 128 mb

提交: 9  解決: 8

[提交][狀態][討論版][命題人:quanxing]

設s是乙個具有n個元素的集合,s=⟨a1,a2,……,an⟩s=⟨a1,a2,……,an⟩ ,現將s劃分成k個滿足下列條件的子集合s1,s2,……,sks1,s2,……,sk ,且滿足:

1.si ≠ ∅

2.si ∩ sj = ∅            (1≤i,j≤k  i≠j)

3.s1 ∪ s2 ∪ s3 ∪ … ∪ sk = s

則稱s1,s2,……,sks1,s2,……,sk 是集合s的乙個劃分。它相當於把s集合中的n個元素a1,a2,……,ana1,a2,……,an 放入k個(0<k≤n<30)無標號的盒子中,使得沒有乙個盒子為空。請你確定n個元素a1,a2,……,ana1,a2,……,an 放入k個無標號盒子中去的劃分數s(n,k)。

給出n和k。

n個元素

a1,a2,……,ana1,a2,……,an 放入k個無標號盒子中去的劃分數s(n,k)。

10 6
22827

/*

對於任一元素a(n)有兩種情況 1:a(n)存在於k個子集中,那麼我們只需要把剩下的a(1)-a(n-1)劃分到k-1個子集 則digui(i-1,j-1)

2.a(n)不是k個子集中的乙個,那麼a(n)必定和其他元素構成子集那麼就是把a(1)-a(n-1)劃分為k個子集然後把a(n)

任意放入乙個子集則有j*digui(i-1,j)

遞迴關係就是:digui(i-1,j-1)+j*digui(i-1,j)

*/#include

#include

using

namespace

std;

int digui(int i,int

j)

intmain ()

return

0;

}

遞推遞迴 集合的劃分

設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是集合的乙個劃分。它相當於把s集合中的n個元素a1,a2,an放入k個 0 k n 30 無標號的盒子中,...

遞迴與遞推 集合的劃分

設s是乙個具有n個元素的集合,s 現將s劃分成k個滿足下列條件的子集合s1,s2,sk,且滿足 1 si 2 si sj 3 s1 s2 s3 sk s 則稱s1,s2,sk是集合s的乙個劃分。它相當於把s集合中的n個元素a1,a2,an放入k個 0 兩個整數n和k 乙個整數,劃分數s n,k 4 ...

集合的劃分

問題描述 設s是乙個具有n個元素的集合,s a1,a2,an 現將s劃分成k個滿足下列條件的子集合s1,s2,sk 且滿足 輸入樣例 setsub.in 23 7 輸出樣例 setsub.out 4382641999117305 演算法分析 先舉個例子,設s 1,2,3,4 k 3,不難得出s有6種...