NOJ 1214 Catalan数

来源:互联网 发布:卷积网络 pooling 编辑:程序博客网 时间:2024/06/04 01:28

2016.10.14

【题目描述】
1214.Catalan数

时限:100ms 内存限制:10000K 总时限:1000ms

描述
令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),这是n阶递推关系。

输入
一个整数N,0≤N<20
输出
给出Catalan数列中第N个数的大小并换行

输入样例
8
输出样例
1430

【解题思路】
按题意要求做就好

【代码实现】

# include <stdio.h>int a[25];int catalan(int );int main(void){    int n;    scanf("%d", &n);    printf("%d\n", catalan(n));    return 0;}int catalan(int n){    int i, j;    int ans;    if (n == 0 || n == 1)        return 1;    else    {        if (a[n])            return a[n];        ans = 0;        for (i = 0; i <= n-1; ++i)            ans += catalan(i)*catalan(n-i-1);        return (a[n] = ans);    }}

【心得体会】
Catalan数一般可用于三类应用:
1.矩阵链乘: P=a1a2a3…an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n-1)种)
2.一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?(h(n))
3.将一个凸多边形区域分成三角形区域的方法数。(h(n-2)种)

0 0
原创粉丝点击