BSG白山极客挑战赛-AVL树

2023-12-25 09:59
文章标签 avl 挑战赛 极客 白山 bsg

本文主要是介绍BSG白山极客挑战赛-AVL树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


                                                                    AVL树的种类

平衡二叉树(AVL树),是指左右子树高度差至多为1的二叉树,并且该树的左右两个子树也均为AVL树。 现在问题来了,给定AVL树的节点个数n,求有多少种形态的AVL树恰好有n个节点。

Input
<span style="font-size: 14px;">一行,包含一个整数n。 (0 < n <= 2000)</span>
<span style="font-size: 14px;">
</span>
Output
<span style="font-size: 14px;">一行表示结果,由于结果巨大,输出它对1000000007取余数的结果。</span>
<span style="font-size: 14px;">
</span>
Input示例
<span style="font-size: 14px;">10</span>
Output示例
<span style="font-size: 14px;">60</span>

题意:如题。

题目链接:AVL树

解题思路:

首先题目限制是2000个结点,由二叉树的性质可知,最多也只能有20层(20层,2048个结点),所以可以考虑暴力!

然后一棵n个结点的AVL树,其左右两棵子树,也是AVL树,并且总结点数为n-1,而且层次差不能超过1,所以两棵子树也就是两种情况(层次差为0,层次差为1)。

dp[i][j]表示高度为i,结点数为j的所有AVL树的形态数。

就有状态转移方程:

                              dp[i][j]=dp[i-1][k]*dp[i-1][j-k-1]+ dp[i-1][k]*dp[i-2][j-k-1]*2

注意到左右子树层次不同时是可以交换左右子树的,但层次相同的时候循环k其实已经把左右对称的情况考虑了。

总结:

DP的训练还是太少太少了,竟然想到了DP,却不知道怎么列方程!!!不过也再一次见识到了DP的威力。

代码:

#include#include#include#include#define N 1000000007
using namespace std;
typedef long long ll;
ll dp[20][2005];
int main()
{
int i,j,k,n;
while(~scanf("%d",&n)){
memset(dp,0,sizeof(dp));
dp[1][1]=dp[0][0]=1;//边界情况
ll ans=dp[1][n];
for(i=2;i<20 ;i++  ){ //20层的节点数为2028
for(j=0;j<=n;j++){ //DP,总结点数位 n
for(k=0;k

这篇关于BSG白山极客挑战赛-AVL树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

AVL 树的旋转

什么是 AVL 树? AVL 树是一种自平衡二叉搜索树(Binary Search Tree, BST),以其发明者 G. M. Adelson-Velsky 和 E. M. Landis 的名字命名。它的特点是对于任意一个节点,其左右子树的高度差(平衡因子)不超过 1,这确保了 AVL 树的高度在 O(log n) 的范围内,从而保证了插入、删除和查找操作的时间复杂度都是 O(log n)。

【C++】【数据结构】一步一步写平衡二叉树[AVL]

转载:有修正,原作者存在一些错误,这里进行了更正。/* 平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体第一个引入平衡概念的二叉树。特点:对于每一个结点,它的左右子树的高度之差不能超过1,若插入或删除一个节点之后使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态。这个方案很好的解决的了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度

2024年第十届数维杯国际大学生数学建模挑战赛

竞赛介绍 为了培养学生的创新意识及运用数学方法和计算机技术解决实际问题的能力,内蒙古创新教育学会、内蒙古基础教育研究院决定主办2024年第十届数维杯国际大学生数学建模挑战赛(国际赛)。 数维杯大学生数学建模挑战赛每年分为两场,每年上半年为数维杯国赛(5月,俗称小国赛),下半年为数维杯国际赛(11月),2023年数维杯国际大学生数学建模挑战赛共有近1.5万名学生参赛,参赛队伍来自国内外1177所

高校计算机能力挑战赛C++

2020 1.Excel表列名称由字母A~Z组成,列字母的规律如下: A、B、C.....Z、AA、AB......AZ、BA、BB.......ZZZZY、ZZZZZ....... 输入:输入包含两个列名称字符串,长度均小于等于5。输出: 输出:两个列名称之间共有多少列 样例输入: AA  AZ 样例输出: 24 2."九键拼音中数字与英文字母成对应关系:2--abc, 3-def,

C++深入理解AVL树的设计与实现:旋转操作详解

C++深入理解AVL树的设计与实现:旋转操作详解 AVL树(Adelson-Velsky and Landis Tree)是一种自平衡二叉搜索树,通过在插入和删除节点时进行旋转操作来保持树的平衡。AVL树的每个节点都维护一个平衡因子,即左右子树的高度差,确保其绝对值不超过1。本文将详细介绍如何实现一个AVL树,并提供旋转操作的实现细节。 一、AVL树的基本概念 AVL树是一种高度平衡的二叉搜

2020计算机挑战赛Java组真题

单选题 1.下列叙述哪些是错误的(). A.final 类不可以有子类 B.构造方法是类的一种特殊方法,其方法名必须与类名相同 C.抽象类可以用new运算符创建对象 D.内存回收程序不允许程序员直接释放内存2.下列叙述哪些是错误的(). A.abstract类不可以用new和构造函数定义对象 B.构造方法的返回值类型只能是void型 C.内存回收程序负责释放无用内存 D.Java类只能是单继承的

极客天成分布式全闪存储在大模型训练中的应用

01 国内大语言模型训练使用的存储系统应用现状 近年来,中国在人工智能领域,特别是大语言模型(LLM)的研发和应用方面取得了显著进展。随着百度文心一言、阿里通义千问、讯飞星火等国产大模型的推出,中国AI产业进入了快速发展期。这一趋势带动了对高性能存储系统的巨大需求,尤其是在模型训练阶段。 当前,中国大语言模型训练的存储市场呈现以下特点,随着更多企业和研究机构投入LLM研发,对大容量、高性能存

2017年华为精英挑战赛

http://blog.csdn.net/h532600610/article/details/70183608 http://blog.csdn.net/mmy1996/article/details/64443159

AVL树及其性质

概念 AVL树是一种自平衡二叉搜索树,由G.M. Adelson-Velsky和E.M. Landis在1962年提出。AVL树的特点是任何节点的两个子树的高度最多相差1,这个特性保证了树的平衡,从而保证了树的主要操作(如插入、删除和查找)的时间复杂度为O(log n)。 AVL树的主要性质 平衡因子: 每个节点都有一个平衡因子,定义为右子树高度减去左子树高度。在AVL树中,每个节点的平衡