假设电影院只有一个售票处,而每张票的价格是50美元。购票队列由m + n人组成(m人每人只有50美元的钞票,n人每人只有100美元的钞票)。
现在,您的问题是要计算从第一人到最后一个人不会停止购买过程的排队方式的数量。
注意:最初,售票处没有钱。
当售票处没有50美元的钞票,但排队的第一人只有100美元的钞票时,将停止购买过程。
# 题解
卡特兰数字的推导,区别是n>m,并且每个n和m的内部的有顺序,
(C(n+m,n)-C(n+m,n+1)) * m! * n!
1 import java.math.BigInteger; 2 import java.util.Scanner; 3 public class Main{ 4 public static void main(String[] args){ 5 int n,m; 6 Scanner in=new Scanner(System.in); 7 int cnt=0; 8 while(in.hasNext()){ 9 cnt++; 10 n=in.nextInt(); 11 m=in.nextInt(); 12 BigInteger ans=BigInteger.ONE; 13 if(n==0&&m==0)break; 14 if(n<m) ans=BigInteger.ZERO; 15 else { 16 for(int i=1;i<=n+m;i++){ 17 ans=ans.multiply(BigInteger.valueOf(i)); 18 } 19 int x=(n-m+1); 20 int y=(n+1); 21 ans=ans.multiply(BigInteger.valueOf(x)); 22 ans=ans.divide(BigInteger.valueOf(y)); 23 } 24 System.out.println("Test #"+cnt+":"); 25 System.out.println(ans); 26 } 27 } 28 }
Buy the tickets ( 卡特兰数大数、排列有顺序
原文:https://www.cnblogs.com/hhyx/p/12622735.html