题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
 

作为游戏魔方的编写者和管理员,Bob在很多主存模块中检测游戏魔方,并且Bob从未被用户打败,同时他也经常和游戏魔方作战。

然而,不愉快的事情发生了,游戏《失落的洛杉矶》崩溃了,由于出现了一个非常可恶的病毒——“十六进制”,它非常奇怪,并且非常喜欢玩,因此,Bob必须先和它玩,才能和别人玩。

此次“十六进制”发明了以下游戏:Bob必须通过一些有n个节点的二叉搜索树,二叉搜索树是一颗二叉树,每个节点有一个唯一的关键字。我们来说一下二叉搜索树的性质,以下规则在每个节点上都成立:每个节点的关键字都大于左子树上的所有节点的关键字,都小于右子树上所有节点的关键字。每个关键字都是从1~n的不同的正整数。每棵树上的所有节点都最多有两个子节点,或者没有子节点(在这种情况下的节点被称为叶子节点)。

在“十六进制”的游戏中,所有的树都是不同的,但是每棵树的高度都不低于h。在此问题中,“高度”指的是从根节点到最远的叶子节点的最多节点数(包含叶子节点和根节点)。当Bob跳过一棵树的后,这棵树会消失。当所有的树都消失了,Bob就通过了游戏魔方。他想知道在最坏的情况下,他必须跳过多少棵树,你能帮助他吗?

Input
单组测试数据
输入数据包含两个以空格隔开的正整数n和h (1<=n<=35,1<=h<= n) 。
Output
输出一个整数表示问题的答案。题目保证这个整数不超过9*10^18。
Input示例
3 2
Output示例
5

//对于DP还是不够强啊,想到一部分,但还是没有找到状态方程
按理说,性质很容易发现,二叉搜索树,如果根节点确定,那么,左右树的节点数就一定了
然而我想的是dp[i][j]为根为 i ,j 高度的种数,然后思索了半天,发现并不好dp,唉
假如 dp[i][j] 是 i 个节点,高度小于等于 j 的个数的话,就非常好做了、、、
 #include<bits/stdc++.h>
using namespace std; #define LL long long
#define eps 1e-8
#define MX 40 int n,h;
LL dp[MX][MX]; int main()
{
while (scanf("%d%d",&n,&h)!=EOF)
{
memset(dp,,sizeof(dp));
for (int i=;i<=n;i++)
dp[][i]=;
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
for (int k=;k<=i;k++)
dp[i][j]+=dp[k-][j-]*dp[i-k][j-];
printf("%lld\n",dp[n][n]-dp[n][h-]);
}
return ;
}

1603 限高二叉排列树(计数DP)的更多相关文章

  1. [ZJOI2010]排列计数 (组合计数/dp)

    [ZJOI2010]排列计数 题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有 ...

  2. 【BZOJ】2111: [ZJOI2010]Perm 排列计数 计数DP+排列组合+lucas

    [题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数 ...

  3. 【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值

    [题意]n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui].B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数.当有一 ...

  4. 洛谷P2015 二叉苹果树(树状dp)

    题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...

  5. [DP之计数DP]

    其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...

  6. NOI 2015 荷马史诗【BZOJ 4198】k叉Huffman树

    抱歉因为NOIP集训,好长时间没再写题解了. NOI 2015也就只有这道题一看就能懂了-- 4198: [Noi2015]荷马史诗 Time Limit: 10 Sec  Memory Limit: ...

  7. 二叉索引树BIT

    定义     二叉索引树,binary index tree,又名树状数组,或Fenwick Tree,因为本算法由Fenwick创造.     对于数组A,定义Query(i,j) = Ai +Ai ...

  8. [SDOI2010]地精部落[计数dp]

    题意 求有多少长度为 \(n\) 的排列满足 \(a_1< a_2> a_3 < a_4 \cdots\) 或者 $a_1> a_2 < a_3 > a_4\cdo ...

  9. 【AtCoder】AGC022 F - Leftmost Ball 计数DP

    [题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...

随机推荐

  1. lodash forIn forOwn 遍历对象属性

    _.forIn(object, [iteratee=_.identity]) 使用 iteratee 遍历对象的自身和继承的可枚举属性. function Foo() { this.a = 1; th ...

  2. 51单片机 | 1-Wire总线及应用实例

    ———————————————————————————————————————————— 1-Wire总线 - - - - - - - - - - - - - - - - - - - - - - - ...

  3. ROS示例----导航功能包Husky_exploration

    ROS导航功能包示例husky amcl gmapping slam exploration 此功能包包含如下文件: 结构如下: $ tree -L 2 . ├── CMakeLists.txt -& ...

  4. (三)Oracle学习笔记—— sql语句

    0. scott 用户默认表介绍 scott用户Tables目录下包含四张表 1. insert(插入)语句 给指定列插入数据: ,'xx'); 插入全部列数据: ,'xx','lll'); 2. u ...

  5. (四)Maven构建多模块项目

    在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层).service(业务逻辑层).web(表现层),这样分层之 ...

  6. C# 匿名类型 分组 求和

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. TCP/IP ---分层

    TCP/IP的分层 ICMP是IP协议的附属协议.IP层用它来与其他主机或路由器交换错误报文和其他重要信息.尽管ICMP主要被IP使用,但应用程序也有可能访问它.我们将分析两个流行的诊断工具,Ping ...

  8. Atitit.提升api兼容性的方法 v3 q326

    Atitit.提升api兼容性的方法 v3 q326 1. Atitit.兼容性的“一加三”策略1 2. 2. 扩展表模式1 3. 3. 同时运行模式1 3.1. 3.1. 完美的后向兼容性2 3.2 ...

  9. atitit.atiOrmStoreService 框架的原理与设计 part1  概述与新特性

    atitit.atiOrmStoreService 框架的原理与设计 part1  概述与新特性 1. 新特性如下 支持生成sql在无数据库连接的情况下 2. Orm设计 主要的俩个以来service ...

  10. [容器]gcr.io镜像下载

    下载gcr.io的镜像hosts文件  把下面两行加入到/etc/hosts中. 更多在这里http://wst.so/files/hosts 61.91.161.217 gcr.io 61.91.1 ...