Codeforces - 9D - How many trees? - 简单dp - 组合数学
https://codeforces.com/problemset/problem/9/D
一开始居然还想直接找公式的,想了想还是放弃了。原来这种结构是要动态规划。
状态是知道怎么设了,$t_{nh}$ 表示节点数为n个,树高为h的BST的个数。
为什么要这么设状态呢?是考虑到题目关心BST的高度,而且BST具有递归性。
但是这个关键就是要加上n个节点的标记,因为不同节点数量明显可以构造出的高为h的树不同,而且也会影响BST另一侧的构造。
所以说设对状态就做对了一半。
思路就是按高为h的BST是怎么由高为 $h-1$ 的BST加上根节点转移过来的,重点是向上转移而不是向下转移。
首先你要分类讨论,这个根节点的数字是 $m$ ,那么左边会有 $1 \thicksim m-1$ 共 $m-1$ 个节点,右边则有 $n-m$ 个节点,然后分
1.左子树的高是 $h-1$ ,右子树的高是 $0 \thicksim h-1$ (假如可以放得下的话)。
2.右子树的高是 $h-1$ ,左子树的高是 $0 \thicksim h-2$ (注意是h-2,否则和上面重复)
左右子树的构造是独立的,所以相乘。两种情况的分类的,所以相加。
最后遍历一遍 $m$ 得到所有 $t_{nh}$ 的和。

最后在自己做的时候,犯了几个小问题,首先就是 $m$ 的意思,定义中是指 $root$ 的值,写的时候变成的左子树的节点数,所以挂了。其次是 $t_{11}$ 虽然是平凡情况但是我用 $+=$ 运算的话会出毛病。第三是题目要求的是高度不小于 $h$ 的 $n$ 节点BST的总数,那么应该是 $sum(n,maxh=n)-sum(n,maxh=h-1)$ 。
#include<bits/stdc++.h>
using namespace std;
#define ll long long unsigned ll t[][]={}; unsigned ll sum(int n,int maxh){
unsigned ll res=;
for(int i=;i<=maxh;i++){
res+=t[n][i];
}
//printf("sum(t[n=%d][maxh=%d])=%llu\n",n,maxh,res);
return res;
} int n,h;
void solve(){
t[][]=;
//空树也是1种情况,因为要算乘法
for(int i=;i<=n;i++){
t[i][]=;
t[][i]=;
//这两种树不可能构造
} for(int ni=;ni<=n;ni++){
for(int hi=;hi<=n;hi++){
if(ni<hi)
continue;
for(int m=;m<=ni;m++){
t[ni][hi]+=t[m-][hi-]*sum(ni-m,hi-); //printf("t[%d][%d]+=%llu*%llu\n",ni,hi,t[m-1][hi-1],sum(ni-m,hi-1));
t[ni][hi]+=sum(m-,hi-)*t[ni-m][hi-];
}
//printf("t[%d][%d]=%llu\n",ni,hi,t[ni][hi]);
}
}
} int main(){
scanf("%d%d",&n,&h);
solve();
unsigned ll ans=;
ans=sum(n,n)-sum(n,h-);
printf("%llu\n",ans);
}
Codeforces - 9D - How many trees? - 简单dp - 组合数学的更多相关文章
- Codeforces 9D How many trees? 【计数类DP】
Codeforces 9D How many trees? LINK 题目大意就是给你一个n和一个h 问你有多少个n个节点高度不小于h的二叉树 n和h的范围都很小 感觉有无限可能 考虑一下一个很显然的 ...
- Codeforces - 1081C - Colorful Bricks - 简单dp - 组合数学
https://codeforces.com/problemset/problem/1081/C 这道题是不会的,我只会考虑 $k=0$ 和 $k=1$ 的情况. $k=0$ 就是全部同色, $k=1 ...
- Codeforces Round #369 (Div. 2) C. Coloring Trees(简单dp)
题目:https://codeforces.com/problemset/problem/711/C 题意:给你n,m,k,代表n个数的序列,有m种颜色可以涂,0代表未涂颜色,其他代表已经涂好了,连着 ...
- Codeforces - 706B - Interesting drink - 二分 - 简单dp
https://codeforces.com/problemset/problem/706/B 因为没有看见 $x_i$ 的上限是 $10^5$ ,就用了二分去做,实际上这道题因为可乐的价格上限是 $ ...
- codeforces 710E Generate a String(简单dp)
传送门:http://codeforces.com/problemset/problem/710/E 分析: 让你写一个全由"a"组成的长为n的串,告诉你两种操作,第一种:插入一个 ...
- Codeforces Round #369 (Div. 2) C. Coloring Trees(dp)
Coloring Trees Problem Description: ZS the Coder and Chris the Baboon has arrived at Udayland! They ...
- Codeforces Round #260 (Div. 1) A. Boredom (简单dp)
题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...
- codeforces Gym 100500H A. Potion of Immortality 简单DP
Problem H. ICPC QuestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100500/a ...
- Codeforces Round #302 (Div. 2) C. Writing Code 简单dp
C. Writing Code Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/544/prob ...
随机推荐
- 安卓执行机制JNI、Dalvik、ART之间的比較 。android L 改动执行机制。
Android L默认採用ART执行环境.全然兼容64位移动处理器.Google称这将比此前的Dalvik模式性能提高两倍,可是会占用很多其它的内存空间.Android有三种执行模式:JNI.Dalv ...
- iPhone 适配之路
(1)1x时代 2007年,初代iPhone公布,屏幕的宽高是320*480像素.这个分辨率一直到iPhone3GS也保持不变. 那时编写iOS的App应用程序.仅仅支持绝对定位. 比方一个butto ...
- 多线程网页爬虫 python 实现
采用了多线程和锁机制,实现了广度优先算法的网页爬虫. 对于一个网络爬虫,如果要按广度遍历的方式下载,它就是这样干活的: 1.从给定的入口网址把第一个网页下载下来 2.从 ...
- Java经常使用类及其经常用法
1.ArrayList java.util.ArrayList<E> add(E e) //插入尾部 add(int index, E element) remove(int index) ...
- 阿里云serverMySQL无法连接问题解决纪实
作者:fbysss QQ:溜酒酒吧酒吧吾散 blog:blog.csdn.net/fbysss 声明:本文由fbysss原创,转载请注明出处 背景: 在调试程序的时候,发现数据库訪问相关的环节出现错误 ...
- I want a mysqldump –ignore-database option
$ time mysqldump --databases `mysql --skip-column-names -e "SELECT GROUP_CONCAT(schema_name SEP ...
- CString转换成char *字符串问题
buf = (LPSTR)(LPCTSTR)str; ==> buf 显示的是第一个字符 strcpy(pNumber,strNumber); ==> e ...
- 【bzoj2761】【JLOI2011】【不反复数字】【平衡树】
Description 给出N个数,要求把当中反复的去掉.仅仅保留第一次出现的数. 比如,给出的数为1 2 18 3 3 19 2 3 6 5 4.当中2和3有反复.去除后的结果为1 2 18 3 1 ...
- HDU 4821 String 字符串hash
String Problem Description Given a string S and two integers L and M, we consider a substring of S ...
- Phoenix(SQL On HBase)安装和使用报告
一.为什么使用Phoenix二.安装Phoenix2.1 兼容问题?2.2 编译CDH版本的Phoenix2.3 安装Phoenix到CDH环境中三.Phoenix的使用3.1 phoenix的4种调 ...