hdunbsp;1023,catalan,卡特兰数

2023-10-20 04:08
文章标签 卡特兰 hdunbsp 1023 catalan

本文主要是介绍hdunbsp;1023,catalan,卡特兰数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://acm.hdu.edu.cn/showproblem.php?pid=1023

牛人总结:http://yanpol.blog.163.com/blog/static/4817080620106184553824/

#include <stdio.h>
int main()
{
int i,j,yu,temp,n,m,lenth;
int s[101][60];
s[1][1]=1;s[2][1]=2;
s[1][0]=1;s[2][0]=1;
lenth=s[2][0];//s[][0]为所求数字长度,初始为s[2]时(长度为1),即s[2][0]=1;
for(i=3;i<=100;i++)
{
   yu=0;//指进位
   for(j=1;j<=lenth;j++)//乘法
   {
    temp=s[i-1][j]*(4*i-2)+yu;
    s[i][j]=temp;
    yu=temp/10;
   }
   while(yu)
   {
    s[i][++lenth]=yu;
    yu/=10;
   }

   yu=0;//在这指做除法时的余数
   for(j=lenth;j>=1;j--)//除法
   {
    temp=s[i][j]+yu*10;
    s[i][j]=temp/(i+1);
    yu=temp%(i+1);
   }
   while(!s[i][lenth])//除前面零
    lenth--;
   s[i][0]=lenth;
}
while(scanf("%d",&n)!=EOF)
{
   for(i=s[n][0];i>=1;i--)
    printf("%d",s[n][i]);
   printf("\n");
}
return 0;
}

h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2),这是n阶递推关系;
还可以化简为1阶递推关系: 如h(n)=(4n-2)/(n+1)*h(n-1)(n>1) h(0)=1
该递推关系的解为:h(n)=c(2n,n)/(n+1) (n=1,2,3,...)

//这道题还是有很大帮助的,虽说代码不算太难写,但是以前一直对大数除法没什么概念,以为很麻烦,

头一次写完后感觉还好,跟乘法差不多嘛,还有卡特兰数,也算一个小的系列吧,以后多看看,别忘了!!!

//找的相同问题:(自己想,想不出再想,再想不出看解释)

(1)有n个节点的不同形态的二叉树有多少种;
(2)把(严谨一点,凸的)n+2边形沿某几条对角线分割成n个三角形的方法数。
(3)排队买票问题。这是一个经典的问题,凡是高二及高二以上的都应该见过。2n个人排队买票,票价0.5元,有n个人拿的是1     元的钱,n个人拿的是0.5元的钱,售票处没有零钱,问有多少种排队方法,使得售票处不会出现找不出零钱的局面?(每个拿着1元钱的人看作是相同的,每个拿着0.5元钱的人也看作是相同的)
(4)现在有1,2,3..n这么多数来按顺序进栈了,但是什么时候从栈里取出数是没有要求的。这些数出栈的序列有几种呢?

(5)在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?

(6)一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果他从不穿越(但可以碰到)     从家到办公室的对角线,那么有多少条可能的道路?

(7)*
   * *
   * * *
   * * * *
   * * * * *

   形如这样的直角三角形网格,从左上角开始,只能向右走和向下走,问总共有多少种走法?

(8)
     n个1和n个0组成一2n位的2进制数,要求从左到右扫描,1的累计数不小于0的累计数,试求满足这条件的数有多少?

解释部分:

baike.baidu.com/view/1154333.htm

dfs35123.spaces.live.com/blog/cns!A6CB032EC0980F16!523.entry


这篇关于hdunbsp;1023,catalan,卡特兰数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/244547

相关文章

hdu4828(卡特兰数+逆元)

这题的前几个数据分别为1,2,5,14,32......................然后确定这是个卡特兰数列 下面来介绍下卡特兰数,它的递推式为f[i+1] = f[i]*(4*n - 6)/n,其中f[2] = f[3] =1;f[4] = 2;f[5] = 14;f[6] = 32.................................. 但是这题的n太大了,所以要用到逆元,

九度考研真题 浙大 2007-浙大1023:EXCEL排序 排序

//1023:EXCEL排序 #include<iostream>  #include<algorithm> #include<string.h> using namespace std; struct stu{ char nu[10]; char name[10]; int score; }stud[100100]; bool cmp1(stu A,

HDU 1130(卡特兰数,大数)

题意:如题。   import java.util.*;import java.math.*;public class Main{public static void main(String[] args) {int n;Scanner in=new Scanner(System.in);BigInteger one=BigInteger.ONE;BigInteger four

hdu 2067 小兔的棋盘 (卡特兰数的应用)

/******************* Author:fisty* Data:2014-10-19* hdu 2067*****************/#include <cstdio>#include <algorithm>using namespace std;long long f[110];//卡特兰数int main(){f[0]=1;for(int i=1;i<=35;i

环境变量path的值超过1023字符。无法设置该值

在我们安装oracle的时候,可能会出现如下问题: 环境变量path的值超过1023字符。无法设置该值 可以修改环境变量来解决问题: 1.删除不必要的环境变量路径,使得path值大小小于1023; 2.配置path1路径,path1路径包含原始的path路径

UVa 991 Safe Salutations 卡特兰数

题目来源:UVa 991 Safe Salutations 题意:圆上2*n个点均匀分布 两两相连 求不相交的方案数 思路:卡特兰数的应用 以下总结转自某大牛 /*最典型的四类应用:(实质上却都一样,无非是递归等式的应用,就看你能不能分解问题写出递归式了)1.括号化问题。矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化

uva 10303 - How Many Trees?(卡特兰数)

题目链接:uva 10303 - How Many Trees? 卡特兰数,公式num[i + 1] = num[i] * (4 * i - 6) / i ( i ≥ 3)。 #include <stdio.h>#include <string.h>#include <iostream>using namespace std;const int N = 6005;str

HDUnbsp;1215--七夕节

七夕节 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2628 Accepted Submission(s): 986 Problem Description 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的

【CF1924D】Balanced Subsequences 【卡特兰数,组合数,数学】

C F 1924 D . CF1924D. CF1924D.Balanced Subsequences 题意为:给定 n , m , k n,m,k n,m,k,求有多少个由 n n n 个 (, m m m 个 ) 组成的序列满足最长的合法括号子序列的长度恰为 2 k 2k 2k(对 1 0 9 + 7 10^9+7 109+7 取模)。 思路 我们很容易想到这跟 C a t

卡特兰数(Catalan)的原理和题目

Catalan数的定义令h(1)=1,Catalan数满足递归式:h(n) = h(1)*h(n-1) +h(2)*h(n-2) + ... + h(n-1)h(1),n>=2该递推关系的解为: 证明: 令1表示进栈,0表示出栈,则可转化为求一个2n位、含n个1、n个0的二进制数,满足从左往右扫描到任意一位时,经过的0数不多于1数(也就是1的个数>=0的个数)。显然含n个1、n个0的2n位二进