码迷,mamicode.com
首页 > 其他好文 > 详细

Problem - 9D - Codeforces

时间:2019-01-18 15:10:02      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:ORC   codeforce   ems   不同   注意   否则   高度   bst   nbsp   

https://codeforces.com/problemset/problem/9/D

一开始居然还想直接找公式的,想了想还是放弃了。原来这种结构是要动态规划。

状态是知道怎么设了,tnh表示节点数为n个,树高为h的BST的个数

为什么要这么设状态呢?是考虑到题目关心BST的高度,而且BST具有递归性。

但是这个关键就是要加上n个节点的标记,因为不同节点数量明显可以构造出的高为h的树不同,而且也会影响BST另一侧的构造。

所以说设对状态就做对了一半。

 思路就是按高为h的BST是怎么由高为h-1的BST加上根节点转移过来的,重点是向上转移而不是向下转移。

首先你要分类讨论,这个根节点的数字是m,那么左边会有1~m-1共m-1个节点,右边则有n-m个节点,然后分

1.左子树的高是h-1,右子树的高是0~h-1(假如可以放得下的话)。

2.右子树的高是h-1,左子树的高是0~h-2(注意是h-2,否则和上面重复)

左右子树的构造是独立的,所以相乘。两种情况的分类的,所以相加。

最后遍历一遍m得到所有tnh的和。

 

技术分享图片

 

Problem - 9D - Codeforces

标签:ORC   codeforce   ems   不同   注意   否则   高度   bst   nbsp   

原文地址:https://www.cnblogs.com/Yinku/p/10287466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!