Problem - 9D - Codeforces
Posted yinku
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Problem - 9D - Codeforces相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章
CodeForces 633B A Trivial Problem
Codeforces Round #439 (Div. 2) Problem B (Codeforces 869B)
CodeForces - Problem 1446 - Knapsack - 思维
Codeforces Round #439 (Div. 2) Problem A (Codeforces 869A) - 暴力