题目:让你输出从点(0,0)到点(N,0)一共有多少种方法,点(r,c)可以到点(r,c+1),(r+1,c+1),(r-1,c+1),但是不能走到x轴的下方。
下图是N=4的方法
3 4
4 9
思路:行数要么+1,要么+0,要么-1,因为不能到x轴的下方,所以任意时刻+1的次数都要大于等于-1的次数,所以就是卡特兰数了呀。
设总的+1的次数为i
ans+=C(n,2*i)*h(i-1)*(4*i-2)/(i+1)
代码:
import java.math.*;
import java.util.*;
public class Main {
static BigInteger one = BigInteger.ONE;
static BigInteger two =BigInteger.valueOf(2);
static BigInteger zero = BigInteger.ZERO;
static BigInteger ten = BigInteger.TEN;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n;
while(cin.hasNext()){
n=cin.nextInt();
BigInteger ans=one,h=one,C=one;
int y=0;
for(int i=1;2*i<=n;i++){
C=C.multiply(BigInteger.valueOf(n-y)).divide(BigInteger.valueOf(y+1));
y++;
C=C.multiply(BigInteger.valueOf(n-y)).divide(BigInteger.valueOf(y+1));
y++;
h=h.multiply(BigInteger.valueOf(4*i-2)).divide(BigInteger.valueOf(i+1));
// System.out.println(C+" "+h);
ans=ans.add(h.multiply(C));
}
ans=ans.mod(ten.pow(100));
System.out.println(ans);
}
cin.close();
}
}