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) - 暴力

Minimax Problem CodeForces - 1288D(二分+状态压缩)

Codeforces Problem - 1016C