Brackets
This year MK is 5 years old. So he decides to learn some arithmetic. But he was confused by how to write the brackets. He has already known that the brackets should match when writing them correctly. Such as “()(())” is correct but “())(” is not.
The problem is that, if there are N pairs of brackets, how many ways that MK can write them correctly?
Input
There are several test cases. Each case contains a number N (1 <= N <= 1000) indicating the pairs of brackets.
Output
For each case, please output the answer mod 1,000,000,007.
Sample Input :
5
7
Sample Output :
42
429
解题报告
此题为
Catalan number(卡特兰数)的题目,此题套用通用公式令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<stdio.h>
const int maxn = 1000 + 5;
const int MOD = 1000000007;
/*Catalan number*/
int n;
long long f[maxn];
int main() {
f[0] = 1;
for(int i = 1; i <= 1000; i++) {
for(int j = 0; j < i; j++) {
f[i] += f[j] * f[i - j - 1] % MOD;
f[i] %= MOD;
}
}
while(scanf("%d", &n) == 1) {
printf("%I64d\n", f[n]);
}
return 0;
}