catalan数。大数与小数的相乘和相除(hdu1134)
来源:互联网 发布:直播回看软件 编辑:程序博客网 时间:2024/05/01 11:32
题目意思就是求2N个数字,连N 条不相交的线的方案数.
此题考查的是卡特兰数,由于卡特兰数很大,所以考虑大数处理。
卡特兰数的前几项为:h(0)=1;h(1)=1;h(2)=2;h(3)=5……
卡特兰数的递推公式为:h(n)=h(n-1)*(4*n-2)/(n+1);
非递推公式为C(2n,n)/(n+1);
此题用递推公式求解,并用到大数的乘法和大数的乘法处理,本题对卡特兰数的前100项做了预处理:
#include<iostream> //卡特兰数求法 递推公式h(n)=h(n-1)*(4*n-2)/(n-1)#include<cstdio>using namespace std;#include<string.h>#define N 100 //存一个卡特兰数的数组长度#define M 10000 //以4位数存到 数组中的一个数中int a[101][N];void multiply(int a[],int n,int b)//大数乘法{ int i,aa=0; for(i=N-1;i>=0;i--) { aa=aa+b*a[i]; a[i]=aa%M; aa=aa/M; }}void divide(int a[],int n,int b)//大数除法{ int div=0,i; for(i=0;i<N;i++) { div=div*M+a[i]; a[i]=div/b; div=div%b; }}int main(){ int n,i; memset(a[1],0,sizeof(a[1]));// a[1][N-1]=1; //初始化第一个即当n=1时 for(i=2;i<101;i++) { memcpy(a[i],a[i-1],N*sizeof(int));//memcpy函数的恰到用处 multiply(a[i],N,4*i-2);//执行乘(4*n-2) h(n)=h(n-1)*(4*n-2) divide(a[i],N,i+1); //执行/(n+1) } while(scanf("%d",&n)!=EOF&&n!=-1) { for(i=0;i<N&&a[n][i]==0;i++);//去掉数组前面为0的元素 printf("%d",a[n][i++]);//输出不为0的第一个元素 for(i=i;i<N;i++)//输出后面的 printf("%04d",a[n][i]);//注意要用到"%04d",若不为4位数,前面补0 printf("\n"); } return 0;}
0 0
- catalan数。大数与小数的相乘和相除(hdu1134)
- hdu1134大数+catalan数
- C++大数模板 hdu1134 Catalan数
- hdu1023(大数相乘与大数相除)
- hdu1134、1130-Catalan数
- hdu 1023 1130 1134 卡特兰数 (中间有大数相除和大数相乘)
- 大数相加(相减,相乘,相除)
- 大数与小数相乘算法
- hdu1134 Game of Connections(Catalan数, 顺便附上大数类模板)
- 高精度模版(大数相加 相乘 相除)
- NYOJ 45 棋盘覆盖(大数相乘,相除)
- (大数乘小数、大数加小数、大数相乘、大数阶乘、大数进制转换)
- 两个数相乘(包括整数和小数),精度问题
- hdu 1023 Train Problem II 这题运用到大数相乘+大数相除+卡特兰数
- 大数相除 /大数相乘 大数相除是低精度
- HDU1133 大数乘小数 大数除小数
- 两个大数相乘、精度很高的小数相乘(小数点后位数没有限制,请写一个高精度算法)
- 大数相加,相减,相除,相乘。。。java BigInteger BigDecimal
- 关于微软官网上提供的 SQL Server® 2008 R2 SP2各版本分析
- java开发前奏
- 一个程序员的时间管理(GTD)
- CMD与DOS命令
- 跨行清算系统的实现过程
- catalan数。大数与小数的相乘和相除(hdu1134)
- CF 401D - Roman and Numbers
- Windows下启动Tomcat 访问localhost:8080遇到“java.lang.IllegalStateException: No output folder”
- labview 2011 程序框图 控件随局部变量移动
- VS2012变化的快捷键
- 这个团队(二)
- selenium相关名词
- 自学考试之画龙点睛
- C#正则表达式