標題:出棧次序瀏覽器
X星球特別講究秩序,全部道路都是單行線。一個甲殼蟲車隊,共16輛車,按照編號前後發車, 夾在其它車流中,緩緩前行。spa
路邊有個死衚衕,只能容一輛車經過,是臨時的檢查站,如圖【p1.png】所示。code
X星球太死板,要求每輛路過的車必須進入檢查站,也可能不檢查就放行,也可能仔細檢查。blog
若是車輛進入檢查站和離開的次序能夠任意交錯。那麼,該車隊再次上路後,可能的次序有多少種?string
爲了方便起見,假設檢查站可容納任意數量的汽車。io
顯然,若是車隊只有1輛車,可能次序1種;2輛車可能次序2種;3輛車可能次序5種。class
如今足足有16輛車啊,親!須要你計算出可能次序的數目。方法
這是一個整數,請經過瀏覽器提交答案,不要填寫任何多餘的內容(好比說明性文字)。di
方法一:co
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 int main(){ 5 int sum=0; 6 int f[17]; 7 memset(f,0,sizeof(f));//注意要賦初值 8 f[0]=1; 9 f[1]=1; 10 f[2]=2; 11 f[3]=5; 12 for(int i=4;i<=16;i++){ 13 for(int j=0;j<=i-1;j++){ 14 f[i]+=f[j]*f[i-1-j]; 15 } 16 } 17 printf("%d",f[16]); 18 return 0; 19 }
方法二:
1 #include<stdio.h> 2 int ans=0; 3 void dfs(int n,int r,int i){ 4 if(n==32){ 5 ans++; 6 return; 7 } 8 if(r>i){ 9 if(r<16){ 10 dfs(n+1,r+1,i); 11 } 12 if(i<16){ 13 dfs(n+1,r,i+1); 14 } 15 }else{ 16 if(r==i){ 17 if(r<16){ 18 dfs(n+1,r+1,i); 19 } 20 } 21 } 22 return; 23 } 24 int main(){ 25 dfs(0,0,0); 26 printf("%d",ans); 27 return 0; 28 }