csu 1320 Scoop water (数论)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1320

 

 题意:两个水瓢 A B 容量都为 1     

         有一个容积无限的水缸

         用A 往水缸中倒水

         用B 把水缸中的水舀出

         必须使用N次A和N次B

         问 有多少种方法

 

卡特兰数的应用

令h(0)=1,h(1)=1,catalan数满足递推式

h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)

 

 

#include<cstdio>
#include<cstring>
#include<iostream>
#define ll long long
#define mod 1000000007
using namespace std;
ll a[10000+10];
int main()
{
    int n;
    int i,j;
    a[0]=1;
    for(i=1;i<=10000;i++)
    {
       for(j=0;j<i;j++)
       {
           a[i]=(a[j]*a[i-1-j]%mod+a[i])%mod;
       }
    }
    while(cin>>n)
    {
        cout<<a[n]<<endl;
    }
    return 0;
}

 

posted @ 2014-09-07 19:32  sola94  阅读(147)  评论(0编辑  收藏  举报