题目:让你输出从点(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();
}
}

本文介绍了一个特定路径计数问题的解决方法,通过计算从点(0,0)到点(N,0)的所有可能路径数量,重点在于利用卡特兰数进行有效计算。文章提供了详细的算法思路及Java实现代码。
780

被折叠的 条评论
为什么被折叠?



