其他分享
首页 > 其他分享> > 栈

作者:互联网

 

 

题解:该题是可以使用卡特兰数递推来解决,因为是从1到n顺序进栈的所以,定义一数组f[999],用于记录有几个数时的出栈的结果数量,当最后一个出栈的数字是x的时候,出栈的数可以分为两部分:

一部分比x大,一部分比x小

比x大就是f[n-x],比x小就是f[x-1]

当然f[0]和f[1]都是1,从2开始递推

代码如下:

#include<stdio.h>

int approach[999];
int main(void)
{
    int n;
    scanf("%d", &n);
    approach[1] = 1;
    approach[0] = 1;
    for (int i = 2; i <= n; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            approach[i] += approach[j - 1] * approach[i - j];
        }
    }
    printf("%d", approach[n]);
    return 0;
}

 

标签:,出栈,int,approach,999,递推,卡特兰
来源: https://www.cnblogs.com/loliconsk/p/14309449.html