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; }