HDU 2512 一卡通大冒险
生活随笔
收集整理的這篇文章主要介紹了
HDU 2512 一卡通大冒险
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一卡通大冒險
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 860????Accepted Submission(s): 530
{{A},{B},{C}} , {{A,B},{C}}, {{B,C},{A}}, {{A,C},{B}} ,{{A,B,C}} 于是,
這個邪惡計劃的組織者wf希望了解,如果ACM訓練對里有n位帥哥(即有N張一卡通),那么要把這些一卡通夾到書里有多少種不同的方法。
?
Input 包含多組數據,第一行為n,表示接下來有n組數據。以下每行一個數x,表示共有x張一卡通。(1≤x≤2000).?
Output 對每組數據,輸出一行:不同的方法數,因為這個數可能非常大,我們只需要它除以1000的余數。?
Sample Input 4 1 2 3 100?
Sample Output 1 2 5 751 1 //集合劃分問題-----貝爾數 2 3 //代碼一:---遞推 4 #include<stdio.h> 5 int dp[2001][2001]; //dp[i][j] 表示i張卡片 分成j堆 的情況數 6 int num[2001]; 7 8 int main() 9 { 10 int T,i,j,n; 11 for(i=1;i<=2000;++i) 12 dp[i][i]=dp[i][1]=1; 13 for(j=2;j<=2000;++j) 14 for(i=2;i<=j;++i) 15 dp[j][i]=(dp[j-1][i-1]+dp[j-1][i]*i)%1000; 16 /* 17 對于卡片j,要使他有i堆,那么只有兩種選擇,選擇原來j-1張卡片時就有i堆的,卡片j只能是放在任何一個堆里面, 18 就有dp[j-1][i]*i 種放法;或者自己獨立成為一個堆 那么就只有在j-1張卡片,分成i-1堆的情況下,自己獨自成為一個堆, 19 即有dp[j-1][i-1]種放法。 20 */ 21 for(i=1;i<=2000;++i) 22 for(j=1;j<=i;++j) 23 num[i]+=dp[i][j]; 24 scanf("%d",&T); 25 while(T--) 26 { 27 scanf("%d",&n); 28 printf("%d\n",num[n]%1000); 29 } 30 return 0; 31 } 32 33 34 /* 35 遞歸思路: 36 第二類Stirling數是把包含n個元素的集合劃分為正好k個非空子集的方法的數目。 37 遞推公式為: 38 S(n,k) = 0(n<k||k=0), 39 S(n,n) = S(n,1) = 1, 40 S(n,k) = S(n-1,k-1) + kS(n-1,k). 41 */?
轉載于:https://www.cnblogs.com/dongsheng/archive/2012/09/06/2674133.html
總結
以上是生活随笔為你收集整理的HDU 2512 一卡通大冒险的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1595 hdu find the lo
- 下一篇: 科学小世界,婚姻大殿堂