博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3113 二叉树计数2
阅读量:7218 次
发布时间:2019-06-29

本文共 1095 字,大约阅读时间需要 3 分钟。

3113 二叉树计数2

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
 
 
 
题目描述 
Description

一个有n个结点的二叉树总共有多少种形态

输入描述 
Input Description

读入一个正整数n

输出描述 
Output Description

输出一个正整数表示答案

样例输入 
Sample Input

5

样例输出 
Sample Output

42

数据范围及提示 
Data Size & Hint

1<=n<=100

分类标签 Tags 

 
 
 
题解:就是卡特兰数+高精度

其实在代码中我用二维矩阵做了初始化= =

其实就是catalan+高精度的应用,f(n)有几个表达式,f(n)=f(0)f(n-1)+f(1)f(n-2)+f(2)f(n-3)+...+f(n-1)f(0)=C(2n,n)/(n+1)=(4n-2)/(n+1)*f(n-1),这里用的是最后一个。

ps:只用long long只能拿60分
 
AC代码:
#include
using namespace std;const int N=1e6+10;int n,len;int f[N];void mul(int x){ for(int i=1;i<=len;i++) f[i]*=x; for(int i=1;i<=len;i++){ f[i+1]+=f[i]/10; f[i]=f[i]%10; } while(f[len+1]){ f[len+2]=f[len+1]/10; f[len+1]%=10; len++; }}void div(int x){ for(int i=len;i>=1;i--){ f[i-1]+=f[i]%x*10; f[i]/=x; } for(int i=len;i>=1;i--)if(f[i]){len=i;break;}}int main(){ scanf("%d",&n); f[len=1]=1; for(int i=1;i<=n;i++)mul(4*i-2),div(i+1); for(int i=len;i;i--) printf("%d",f[i]); return 0;}

 

 

转载于:https://www.cnblogs.com/shenben/p/5642521.html

你可能感兴趣的文章
RabbitMq、ActiveMq、Kafka和Redis做Mq对比
查看>>
C# 图片处理(压缩、剪裁,转换,优化)
查看>>
Linux bridge-utils tunctl 使用
查看>>
Leetcode Pascal&#39;s Triangle II
查看>>
运行shell脚本报错 &#39;\357\273\277&#39;: command not found 解决的方法
查看>>
android studio 0.8.1使用和遇到问题解决
查看>>
云服务器ECS选购集锦之六区域选择帮助
查看>>
云虚机选购指南之二云虚拟主机试用帮助文档
查看>>
女友眼中的IT男
查看>>
Excel连接
查看>>
java基础-多线程学习
查看>>
WPF打印原理,自定义打印
查看>>
HTML5 5
查看>>
箭头css
查看>>
Python入门,以及简单爬取网页文本内容
查看>>
顺丰科技笔试回忆
查看>>
excel技巧
查看>>
通用防SQL注入漏洞程序(Global.asax方式)
查看>>
服务器进程为何通常fork()两次
查看>>
python中的logger模块
查看>>