求出栈序列的个数

wsxxiaohao 2012-05-13 04:02:48
各位大牛,小第再问一个问题。对于出栈序列的问题。问题描述:给你一个正整数n,入栈的序列为1,2,....n,那么正确的出栈序列有多少个。例子:比如n=3,那么出栈序列共有5个。分别是:1,2,3;1,3,2;2,1,3;2,3,1;3,2,1
下面的是问题的地址。
http://acm.hdu.edu.cn/showproblem.php?pid=1023

其实我已经知道了这个数是怎么求的了。现在想问的是当n=100时,该有什么好的方法来求得最终的这个数。因为这个数可能比较大。int64是无法表示的。
...全文
534 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hackbuteer1 2012-05-13
  • 打赏
  • 举报
回复
hackbuteer1 2012-05-13
  • 打赏
  • 举报
回复
卡特兰数有公式的:c(2n, n)/(n+1).
hen_hao_ji 2012-05-13
  • 打赏
  • 举报
回复
对,卡特兰数,要用大数来做。。
a(n+1)=(4n+2/n+2)*a(n);

#include"stdio.h"
int a[101];
int main()
{
int n,i,j,r1,r2,t,len;
while(scanf("%d",&n)==1)
{
for(i=0;i<=101;i++)
a[i]=0;
a[1]=1;len=1;
for(i=2;i<=n;i++)
{
t=i-1;
for(j=1,r1=0;j<=len;j++) /*乘*/
{
a[j]=a[j]*(4*t+2)+r1;
r1=a[j]/10;
a[j]=a[j]%10;
}
while(r1)
{
len++;
a[len]=r1%10;
r1=r1/10;
}
for(j=len,r2=0;j>0;j--){ //除
a[j]=10*r2+a[j];
r2=a[j]%(t+2);
a[j]=a[j]/(t+2);
}
while(!a[len]) //前导0的处理
len--;
}
for(i=len;i>0;i--)
printf("%d",a[i]);
printf("\n");
}
return 0;
}

[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

这个好像卡特兰数吧。是不是要自己定义大数进行运算??

++
谢谢大牛。能不能帮忙解决下呢
[/Quote]
wsxxiaohao 2012-05-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

这个好像卡特兰数吧。是不是要自己定义大数进行运算??
[/Quote]
++
谢谢大牛。能不能帮忙解决下呢
W170532934 2012-05-13
  • 打赏
  • 举报
回复
这个好像卡特兰数吧。是不是要自己定义大数进行运算??

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧