經典例題 排隊買票
阿新 • • 發佈:2019-02-06
卡特蘭連結
題目描述
有M個小孩到公園玩,門票是1元。其中N個小孩帶的錢為1元,K個小孩帶的錢為2元。售票員沒有零錢,問這些小孩共有多少種排隊方法,使得售票員總能找得開零錢。注意:兩個拿一元零錢的小孩,他們的位置互換,也算是一種新的排法。(M<=10)
輸入
輸入一行,M,N,K(其中M=N+K,M<=10).
輸出
輸出一行,總的排隊方案。
樣例輸入
4 2 2
樣例輸出
8
這題貌似是Catalan數,所以直接代入關係就行了
#include<stdio.h>
int main(){
int M,N,K,sum[11]={0},cell[]={1 ,1,2,6,24,120,720,5040,40320,362880,3628800},a=1,b=1;
scanf("%d%d%d",&M,&N,&K);
for(int i = 0;i<=M;i++){
sum[i] = a/b;
a*=(M-i);
b*=(i+1);
}
int ans = (sum[N]-sum[K-1])*cell[N]*cell[K];//sum[N]-sum[k-1]為所求個數,後面為全排列個數
printf("%d\n",ans>0?ans:0);
return 0;
}