1. 程式人生 > >經典例題 排隊買票

經典例題 排隊買票

卡特蘭連結
題目描述
有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; }