【TFLSnoi李志帥】---函式遞迴
阿新 • • 發佈:2020-08-20
fyx的部落格地址,牆裂推薦!部落格:https://www.cnblogs.com/qwn34/
1315:【例4.5】集合的劃分
老獅:這也是一道經典例題,做好這道題,你的遞迴差不多就沒問題了【狗頭保命】
時間限制: 1000 ms 記憶體限制: 65536 KB
提交數: 9463 通過數: 4074
【題目描述】
設S是一個具有n個元素的集合,S=⟨a1,a2,……,an⟩現將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的一個劃分。它相當於把S集合中的n個元素a1,a2,……,an放入k個(0<k≤n<30)無標號的盒子中,使得沒有一個盒子為空。請你確定n個元素a1,a2,……,an放入k個無標號盒子中去的劃分數S(n,k)。
【輸入】
給出n和k。
【輸出】
n個元素a1,a2,……,an放入k個無標號盒子中去的劃分數S(n,k) 。
【輸入樣例】
10 6
【輸出樣例】
22827
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————這道題有很多亂七八糟的符號,看起來有點怪怪的
翻譯過來就是。。。
1.Si≠0 沒有空盤子
2.Si-Sj!=0 也就是說每個盤子裡元素數量各不相同 (1≤i,j≤k,i≠j)
3.S1+S2+S3+…+Sk=S 每個元素都要分進盤子
上程式碼!
1 #include <bits/stdc++.h> 2 using namespace std; 3 int n,k; 4 long long jh(int n,int k) 5 { 6 if(n<k || k==0)return 0;//遞迴邊界,當盒子數比元素數大時,歸零;當沒有盒子時,歸零; 7 else if(k==n || k==1)return 1;//遞迴邊界,當盒子數等於元素數時,歸一;當只有一個盒子時,歸一; 8 return jh(n-1,k)*k+jh(n-1,k-1);//遞迴式 9 } 10 int main() 11 { 12 cin>>n>>k; 13 cout<<jh(n,k); 14 return 0; 15 }
最後————
fyx的部落格地址,牆裂推薦!部落格:https://www.cnblogs.com/qwn34/