题目

题目大意

对于所有的整数\(k \in [1,n]\),求叶子结点有\(k\)个的二叉树个数,满足每个非叶子结点都有两个儿子,并且对于每个叶子结点,从根节点到它经过的向左的边数少于等于\(m\)个。


思考历程

很容易推出这样的\(DP\):

设\(f_{i,j}\)表示\(m=i\)且\(n=j\)的答案是多少。

\(f_{i,j}=\sum_{k \in [1,n)}{f_{i-1,k}f_{i,j-k}}\)

这样当然过不了。

然而,如果只看第二维,就会感觉它和卡特兰数长得很像。

于是就往打表的方面想……

打出一个表,表可以分成上下两个三角形,下面的那个三角形就是标准的卡特兰数……

然而找不到上面的规律。

%%%GMH大佬居然找到了。

于是就暴力了……


正解

换一种思路\(DP\):

设\(f_{i,j}\)表示已经放了\(i\)个节点,从根往下走已经向左走了\(j\)次。

有两种转移:

一个是继续向左走,那就是转移到\(f_{i+1,j+1}\)

另一个是回到第一个左转的地方,放一个右儿子,那就是转移到\(f_{i+1,j-1}\)

很显然放的节点个数为\(2k-1\),所以这个方法是能过的。


代码

using namespace std;
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 5010
#define mo 998244353
#define ll long long
int m,n;
ll f[N*2][N];
int main(){
freopen("ca.in","r",stdin);
freopen("ca.out","w",stdout);
scanf("%d%d",&m,&n);
f[1][0]=1;
for (int i=1;i<2*n-1;++i)
for (int j=0;j<m;++j)
if (f[i][j]){
(f[i+1][j+1]+=f[i][j])%=mo;
if (j)
(f[i+1][j-1]+=f[i][j])%=mo;
}
for (int i=1;i<=n;++i)
printf("%lld\n",f[2*i-1][0]);
return 0;
}

总结

在做树一类的\(DP\)的时候,不要仅仅是想着从下往上转移,还要考虑一下按照\(dfs\)序来转移。

[JZOJ6353] 【NOIP2019模拟】给的更多相关文章

  1. test20190815 NOIP2019 模拟题

    100+60+40=200,被后面两个题卡着我很不爽. 立方数 [问题描述] 作为 XX 战队的狂热粉丝,MdZzZZ 看到了自己心仪的队伍在半决赛落败,顿时 心灰意冷.看着自己手中的从黄牛那里抢来的 ...

  2. test20190814 NOIP2019 模拟题

    二叉树 [问题描述] 从前有一棵二叉树,我们用如下方式来表示这棵二叉树. 如果一个节点没有儿子,我们用"0"来表示他. 如果一个节点有一个儿子,我们对它的表示以"1&qu ...

  3. 6423. 【NOIP2019模拟11.11】画

    题目描述 Description Input Output Sample Input 3 2 3 3 6 5 1 2 1 3 Sample Output 15 Data Constraint 题解 迫 ...

  4. test20190827 NOIP2019 模拟赛

    100+100+50=250.最后那道期望题需要用另外的方式统计. 精灵加护 ljss 被 M 个敌人打倒在地上啦!每个敌人有一个威力值 bi.但是他手中还拥有 N 把武器!每把武器有一个威力值 ai ...

  5. test20190826 NOIP2019 模拟赛

    100+100+40=240.我觉得如果没做过第三题考场上却能想出来的都是神仙. 基因突变 [问题描述] 邪恶的 707 刚刚从白垩纪穿越回来,心中产生了一个念头:我要统治人类! 但是统治人类是很庞大 ...

  6. test20190818 NOIP2019 模拟赛

    0+0+20=20,不给大样例,小数据又水,还没有题解的垃圾题. A 题 问题描述: long long ago, Lxhgww 统治的国家里有 n 个城市,其中某一个城市是 capital (首都) ...

  7. test20190816 NOIP2019 模拟赛

    100+100+20=220,T3吐槽:整个考室没有一个人正确地理解了题意. 树上路径(phantasm) Akari 的学校的校门前生长着一排 n 棵树,从西向东依次编号为 1 ∼ n.相邻两棵树间 ...

  8. 题解 noip2019模拟赛Day1T3

    题面 运河计划 问题描述 水运在人类的交通运输史中一直扮演着重要的角色.借助河流.的便利,人们得以把大量的货物输送到天南海北不仅仅是自然界现成的河流,人工开凿的运河(如苏伊士运河.巴拿马运河.我国的京 ...

  9. 6424. 【NOIP2019模拟2019.11.13】我的订书机之恋

    题目描述 Description Input Output Sample Input 见下载 Sample Output 见下载 Data Constraint 题解 lj题卡线段树 求出每个右端点往 ...

随机推荐

  1. shell 编程四剑客简介 find sed grep awk(微信公众号摘抄)

    一,Shell编程四剑客之Find 通过如上基础语法的学习,读者对Shell编程有了更近一步的理解,Shell编程不再是简单命令的堆积,而是演变成了各种特殊的语句.各种语法.编程工具.各种命令的集合. ...

  2. 高德地图的权限Activity代码

    /** * */package com.amap.location.demo; import java.lang.reflect.Method;import java.util.ArrayList;i ...

  3. idea激活教程,最新!!!

    1.下载破解补丁(关键). 破解补丁:JetbrainsIdesCrack-4.2-release.jar百度云地址:https://pan.baidu.com/s/18ovphd7sm7oYXQb4 ...

  4. 在CMake中启用VS2017的C++17特性

    VS2017的C++17特性默认并未开启,需要在编译参数中手动开启.找到项目的CMakeLists.txt,在查找编译器的代码后面加入如下内容即可. ") include(CheckCXXC ...

  5. 每天一个Linux命令:ls(1)

    ls ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录). 格式 ls [-alrtAFR] [name...] 参数选项 参数 备注 -a 列出目录下的所有文件,包括以 . ...

  6. BulkLoad加载本地文件到HBase表

    BulkLoad加载文件到HBase表 1.功能 将本地数据导入到HBase中 2.原理 BulkLoad会将tsv/csv格式的文件编程hfile文件,然后再进行数据的导入,这样可以避免大量数据导入 ...

  7. drag事件

    <!DOCTYPE HTML><html>  <head>      <title>拖动事件</title>    <style> ...

  8. mongodb副本集(选举,节点设置,读写分离设置)

    1.相对于传统主从模式的优势 传统的主从模式,需要手工指定集群中的Master.如果Master发生故障,一般都是人工介入,指定新的Master.这个过程对于应用一般不是透明的,往往伴随着应用重新修改 ...

  9. AutoCAD2016安装破解教程

    AutoCAD2016安装破解教程.本人亲自实验,破解成功,有效.以64位为例. 工具/原料   笔记本电脑 AutoCAD2016安装包 AutoCAD2016注册机(xf-adsk2016_x64 ...

  10. 带头节点的单链表-------C语言实现

    /***************************************************** Author:Simon_Kly Version:0.1 Date:20170520 De ...