集合的劃分

2022-05-26 19:42:07 字數 1018 閱讀 4313

【問題描述】

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

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

【輸入樣例】setsub.in

23 7

【輸出樣例】setsub.out

4382641999117305

【分析】本題首先想到用dp求解,狀態s(n,k)題中已經設定好了,那麼關鍵在於如何轉移我們的狀態;

(搜尋貌似過不了,也不會寫qaq)

對於乙個二維的狀態dp[i][j],一般必須從i,j的先前狀態轉移,不能只轉移一維,那麼就需要進行分類

(1){an}單獨放在乙個盒子裡面,只需要將dp[i-1][j-1]的情況求出(即i-1個球放在j-1個盒子裡面)

(2)an放在其他的盒子裡面,則先把a1~an-1放到j個盒子裡,an再放進這j個盒子中,有j種方法。即dp[i-1][j]*j

根據加法原理,dp[i][j]=dp[i-1][j-1]+dp[i-1][j]*j;

別忘了初始化,當k=1時 ,dp[i][1]=1;

**如下:

#includeusing

namespace

std;

intn,k;

int dp[35][35

];int

main()

printf("%d

",dp[n][k]);

return0;

}

【問題描述】

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

集合的劃分

問題描述 設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種...

集合的劃分

尋物啟示 繼續找我的腦子,麻煩各位了 題目背景 公元2020年,一群科學家通過佩奇的遺傳基因轉殖出了許多佩奇,想讓她們去往不同的時空帶給小朋友們快樂 題目描述 設s是n只佩奇最開始所在的時空,s 現將s劃分成k個滿足下列條件的子時空是s1,s2,sk,且滿足 1 任何乙個時空中都必須有乙隻佩奇 2 ...

集合的劃分 遞推)

時間限制 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,...