AcWing 3691:有向树形态 ← 卡特兰数 + 复旦大学考研机试题
【题目来源】
https://www.acwing.com/problem/content/3694/
【题目描述】
求 N 个相同结点能够组成的二叉树的个数。
【输入格式】
一个整数 N。
【输出格式】
输出能组成的二叉树的个数。
【数据范围】
1≤N≤20
【输入样例】
3
【输出样例】
5
【算法分析】
● 卡特兰数(Catalan number)是组合数学中一个常出现在各种计数问题中的数列。若从第 0 项开始,则卡特兰数列 h[n] 为:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, …。
● 常用的卡特兰数列 h[n] 有如下 4 种等价的递推式
h[n]=h[0]*h[n−1]+h[1]*h[n−2]+...+h[n−1]*h[0], (n≥2, h[0]=h[1]=1)
h[n]=h[n−1]*(4*n−2)/(n+1), (n≥2)
h[n]=C(2n,n)−C(2n,n−1), (n=0,1,2,...)
h[n]=C(2n,n)/(n+1), (n=0,1,2,...)
● 卡特兰数的第 20 项为 6564120420,大于 2×10^9,所以代码中要声明为 long long 型。
● 二叉树是有向树
(1)左子树的结点数为 0,右子树的结点数为 n-1。左子树的结点数为 1,右子树的结点数为 n-2。左子树的结点数为 n-1,右子树的结点数为 0。依此类推,可得“左子树的结点数为 k,右子树的结点数为 n-k-1”。

(2)显然,若设 h[k] 表示 k 个结点组成的二叉树的个数,那么由 n 个结点组成的二叉树的个数为 h[0]*h[n−1]+h[1]*h[n−2]+...+h[n−1]*h[0],且 h[0]=h[1]=1。显然就是上文卡特兰数的第一个通项公式。
【算法代码】
#include <bits/stdc++.h>
using namespace std;const int maxn=25;
long long c[maxn];
int n;int main() {cin>>n;c[0]=1,c[1]=1;for(int i=2; i<=n; i++)for(int j=0; j<=i-1; j++)c[i]+=c[j]*c[i-j-1];cout<<c[n];return 0;
}/*
in:
3out:
5
*/
【参考文献】
https://www.acwing.com/solution/content/104520/
https://blog.csdn.net/hnjzsyjyj/article/details/129148916
相关文章:
AcWing 3691:有向树形态 ← 卡特兰数 + 复旦大学考研机试题
【题目来源】 https://www.acwing.com/problem/content/3694/ 【题目描述】 求 N 个相同结点能够组成的二叉树的个数。 【输入格式】 一个整数 N。 【输出格式】 输出能组成的二叉树的个数。 【数据范围】 1≤N≤20 【输入样例】 3 【输出样例】 5 【算法分析】 ● 卡特…...
便携式动平衡仪Qt应用层详细设计方案(基于Qt Widgets)
便携式动平衡仪Qt应用层详细设计方案(基于Qt Widgets) 版本:1.0 日期:2023年10月 一、系统概述 1.1 功能需求 开机流程:长按电源键启动,全屏显示商标动画(快闪3~4次)。主界面&…...
SpringBoot源码解析(十一):准备应用上下文
SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args Sp…...
CSS 使用white-space属性换行
一、white-space属性的常见值 * 原本格式: 1、white-space:normal 默认值,空格和换行符会被忽略过滤掉;宽度不够时文本会自动换行 * 宽度足够时,normal 处理后的格式 * 宽度不够时, normal 处理后的格式 2、white-spa…...
论文笔记(七十二)Reward Centering(四)
Reward Centering(四) 文章概括摘要附录A 伪代码 文章概括 引用: article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.09999…...
Matlab——图像保存导出成好看的.pdf格式文件
点击图像的右上角,点击第一个保存按钮键。...
官方文档学习TArray容器
一.TArray中的元素相等 1.重载一下 元素中的 运算符,有时需要重载排序。接下来,我们将id 作为判断结构体的标识。 定义结构体 USTRUCT() struct FXGEqualStructInfo {GENERATED_USTRUCT_BODY() public:FXGEqualStructInfo(){};FXGEqualStructInfo(in…...
unxi-进程间通信
1.进程间通信实现方式 【1】同一主机 linux下通信方式: a.传统的进程间通信方式 管道 --- 进行数据传输的"管道" 无名管道 有名管道 信号 --- b.system v 进程间通信 (posix 进程间通信) 共享内存 (进程间…...
微型分组加密算法TEA、XTEA、XXTEA
微型分组加密算法TEA、XTEA、XXTEA TEA(Tiny Encryption Algorithm)算法是一种分组加密算法,由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明。TEA、XTEA、XXTEA算法采用64位的明文分组和128位的密钥。它使用Feistel…...
conda 基本命令
1、查询当前所有的环境 conda env list 2、创建虚拟环境 conda create -n 环境名 [pythonpython版本号] 其中[pythonpython版本号]可以不写 conda create -n test python3.12 我们输入conda env list看到我们的环境创建成功了,但是发现他是创建在我们默认的C盘的…...
详解 为什么 tcp 会出现 粘包 拆包 问题
TCP 会出现 粘包 和 拆包 问题,主要是因为 TCP 是 面向字节流 的协议,它不关心应用层发送的数据是否有边界,也不会自动分割或合并数据包。由于 TCP 的流控制和传输机制,数据可能在传输过程中被拆分成多个小的 TCP 包,或…...
Linus的基本命令
以下是一些常见的 Linux 命令: 一、文件和目录操作: - ls:列出目录中的文件和子目录,常用参数有 -a (显示所有文件,包括隐藏文件)、 -l (显示详细信息)、 -h ࿰…...
【Linux】缓冲区和文件系统
个人主页~ 缓冲区和文件系统 一、FILE结构1、fd2、缓冲区(一)有换行有return全部打印(二)无换行无return的C接口打印(三)无换行无return的系统调用接口打印(四)有换行无return的C接口…...
函数式编程:概念、特性与应用
1. 函数式编程简介 函数式编程,从名称上看就与函数紧密相关。它是一种我们常常使用却可能并未意识到的编程范式,关注代码的结构组织,强调一个纯粹但在实际中有些理想化的不可变世界,涉及数学、方程和副作用等概念,甚至…...
git中的merge和rebase的区别
在 Git 中,git merge 和 git rebase 都是用于整合分支变更的核心命令,但它们的实现方式和结果有本质区别。以下是两者的详细对比: 一、核心区别 特性git mergegit rebase历史记录保留分支拓扑,生成新的合并提交线性化历史&#x…...
【目标检测】目标检测中的数据增强终极指南:从原理到实战,用Python解锁模型性能提升密码(附YOLOv5实战代码)
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
uniapp在app下使用mqtt协议!!!支持vue3
什么?打包空白?分享一下我的解决方法! 第一步 找大师算过了,装4.1版本运气好! 所以根目录执行命令… npm install mqtt4.1.0第二步 自己封装一个mqtt文件方便后期开坛做法! // utils/mqtt.js import mqt…...
VMware虚拟机17.5.2版本下载与安装(详细图文教程包含安装包)
文章目录 前言一、vmware虚拟机下载二、vmware虚拟机安装教程三、vmware虚拟机许可证 前言 VMware Workstation Pro 17 功能强大,广受青睐。本教程将带你一步步完成它的安装,简单易上手,助你快速搭建使用环境。 一、vmware虚拟机下载 VMwar…...
如何加固织梦CMS安全,防webshell、防篡改、防劫持,提升DedeCMS漏洞防护能力
织梦系统(DedeCMS)是一款非常知名的CMS系统,因其功能强大、结构科学合理,深受广大用户喜欢。 虽然织梦CMS(DedeCMS)非常优秀,但是为了保障网站安全,我们还是需要做一些必要的防护措…...
STM32的HAL库开发---ADC采集内部温度传感器
一、STM32内部温度传感器简介 二、温度计算方法 F1系列: 从数据手册中可以找到V25和Avg_Slope F4、F7、H7系列只是标准值不同,自行查阅手册 三、实验简要 1、功能描述 通过ADC1通道16采集芯片内部温度传感器的电压,将电压值换算成温度后&…...
保姆级教程:手把手调试vsomeip 3.1.20.3的Event订阅流程(附GDB/日志追踪技巧)
深入调试vsomeip事件订阅:从原理到实战排查指南 事件订阅机制的核心原理 vsomeip作为车载中间件领域的核心通信框架,其事件订阅机制的设计直接影响着分布式系统的实时性和可靠性。理解这套机制的工作原理,是高效排查订阅问题的前提。 事件订阅…...
哪个电台可以点歌送人?找对地方,心意用歌声温柔送达:语际点歌台
很多人心里都藏着一个温柔的念头:想给远方的家人、许久未见的朋友、心里惦记的人,点一首歌,捎上一句祝福。可翻遍手机、问遍朋友,却总在纠结:到底哪个电台可以点歌送人?怎么点才靠谱、能送到对方耳边&#…...
MetaboAnalystR 4.2:代谢组学数据分析的完整R包解决方案指南
MetaboAnalystR 4.2:代谢组学数据分析的完整R包解决方案指南 【免费下载链接】MetaboAnalystR R package for MetaboAnalyst 项目地址: https://gitcode.com/gh_mirrors/me/MetaboAnalystR MetaboAnalystR 4.2是一个功能强大的R语言代谢组学数据分析工具包&a…...
ComfyUI-AnimateDiff-Evolved深度解析:掌握动画生成的进阶实战指南
ComfyUI-AnimateDiff-Evolved深度解析:掌握动画生成的进阶实战指南 【免费下载链接】ComfyUI-AnimateDiff-Evolved Improved AnimateDiff for ComfyUI and Advanced Sampling Support 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-AnimateDiff-Evolved …...
保姆级教程:用TSM模型从零搭建视频打架检测系统(附完整代码)
保姆级教程:用TSM模型从零搭建视频打架检测系统(附完整代码) 在公共安全领域,视频监控系统每天产生海量数据,但传统人工监控效率低下且成本高昂。针对这一痛点,我们基于TSM(Temporal Shift Modu…...
SR锁存器不定态:从理论到实践的深度剖析
1. SR锁存器基础原理:从门电路到记忆单元 我第一次接触SR锁存器是在大学数字电路实验课上,当时看着两个简单的或非门就能实现"记忆"功能,感觉非常神奇。SR锁存器(Set-Reset Latch)确实是数字电路中最基础的记…...
结构体入门:高效封装数据的利器
一、什么是结构体?结构体是用户自定义的数据类型可以把多个不同类型的变量打包在一起用来描述一个完整的对象:学生、员工、点、书籍、游戏角色等比如一个学生包含:学号(int)、姓名(string)、年龄…...
FPGA新手避坑指南:Vivado MIG IP核配置DDR4时,这5个参数千万别乱动
FPGA开发实战:Vivado MIG IP核配置DDR4的10个关键参数解析 第一次打开Vivado的MIG IP核配置向导时,面对密密麻麻的参数选项,大多数FPGA工程师都会感到头皮发麻。特别是当项目进度紧迫,而DDR4接口又迟迟无法正常工作时,…...
ECharts热力地图配色翻车?这份‘颜值即正义’的视觉映射(visualMap)调参指南请收好
ECharts热力地图视觉优化指南:从专业配色到极致体验 当你需要在汇报会议或公共大屏上展示数据时,一张配色糟糕的热力地图可能会让观众瞬间失去兴趣。我曾见过一个案例:某省级政务平台的数据大屏上,热力地图使用了高饱和度的红绿对…...
从零到精飞:APM多旋翼核心参数调校实战指南
1. APM飞控入门:从组装到基础参数设置 第一次接触APM飞控的新手常会被密密麻麻的参数表吓到。我刚开始调试植保无人机时,光是理解PID三个字母就花了整整一周。其实只要掌握核心逻辑,调参就像给汽车做四轮定位——有标准流程可循。 多旋翼飞控…...
