1. 程式人生 > >CSU 1320: Scoop water(卡特蘭數 JAVA)

CSU 1320: Scoop water(卡特蘭數 JAVA)

題目:

Description

  zzy今天剛買了兩個水瓢A和B,容量都是為1升,童心未泯的他打算用這個水瓢來玩遊戲。

  首先zzy準備了一個容量可看作無窮大的水缸,剛開始水缸是空的,然後用水瓢A往水缸里加水,用水瓢B把水缸裡的水舀出去,當使用 水瓢B把水舀出去時水缸裡必須要至少有1升的水。這樣子使用N次水瓢A,也使用N次水瓢B,最後水缸會依舊空的。

Input

  輸入有多個例子,直到檔案結束。

  每個例子僅含一個數N(0<N<=10000),表示你必須使用N次A水瓢和N次B水瓢。

Output

  對於每個例子,請輸出一個數,表示一共有多少種正確的舀水方式使得舀水過程中 使用B水瓢時水缸裡總會有足夠的水。

 (由於數字比較大,輸出的答案模1000000007)

Sample Input

1
2

Sample Output

1
2

思路:其實就是卡特蘭數,用遞推式把前10000個卡特蘭數都求出來即可

程式碼:

import java.util.*;
import java.math.BigInteger;
public class Main{
    public static void main(String[] args) {
    	BigInteger[] s=new BigInteger[10001];
    	s[1]=new BigInteger("1"); 
    	for(int i=2;i<=10000;i++)s[i]=s[i-1
].multiply(BigInteger.valueOf(i*4-2)).divide(BigInteger.valueOf(i+1)); Scanner cin = new Scanner(System.in); while(cin.hasNext()) { int n=Integer.parseInt(cin.nextLine()); System.out.println(s[n].remainder(BigInteger.valueOf(1000000007)).toString()); } } }