题目1547:出入栈

题目1547:出入栈

时间限制:1秒
内存限制:32 兆
特殊判题:
提交:742
解决:249



  题目描述:   给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈。
要求在操作序列的执行过程中不会出现非法的操作,即不会在空栈时执行出栈操作,同时保证当操作序列完成后,栈恰好为一个空栈。
求符合条件的操作序列种类。
例如,4个操作组成的操作序列符合条件的如下:
入栈,出栈,入栈,出栈
入栈,入栈,出栈,出栈  共2种。

输入:

输入包含多组测试用例,每组测试用例仅包含一个整数n(1<=n<=1000)。

输出:

输出仅一个整数,表示符合条件的序列总数,为了防止总数过多超出int的范围,结果对1000000007取模(mod 1000000007)。

样例输入:
2
4
10
样例输出:
       1          2
         42
 
 

状态F[i][j]表示入栈i次,出栈j次的序列总数,其中i>j。

 

#include<stdio.h>
const int MAX=500;
long f[501][501];
int main()
{
    int n;
    for (int i=1;i<=MAX;i++)
        f[i][0]=1;
    for (int i=1;i<=MAX;i++)
        for (int j=1;j<=i;j++)
        {
            f[i][j]=f[i-1][j]+f[i][j-1];
            f[i][j]=f[i][j]%1000000007;
        }
    while(scanf("%d",&n)!=EOF)
    {
        if (n%2==1) printf("0\n");
        else printf("%d\n",f[n/2][n/2]);
    }
    return 0;
}

 

 

转载于:https://www.cnblogs.com/Secontao/p/3606120.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值