[JZOJ6353] 【NOIP2019模拟】给

题目

题目大意

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


思考历程

很容易推出这样的 D P DP DP
f i , j f_{i,j} fi,j表示 m = i m=i m=i n = j n=j n=j的答案是多少。
f i , j = ∑ k ∈ [ 1 , n ) f i − 1 , k f i , j − k f_{i,j}=\sum_{k \in [1,n)}{f_{i-1,k}f_{i,j-k}} fi,j=k[1,n)fi1,kfi,jk
这样当然过不了。
然而,如果只看第二维,就会感觉它和卡特兰数长得很像。
于是就往打表的方面想……
打出一个表,表可以分成上下两个三角形,下面的那个三角形就是标准的卡特兰数……
然而找不到上面的规律。
%%%GMH大佬居然找到了。
于是就暴力了……


正解

换一种思路 D P DP DP
f i , j f_{i,j} fi,j表示已经放了 i i i个节点,从根往下走已经向左走了 j j j次。
有两种转移:
一个是继续向左走,那就是转移到 f i + 1 , j + 1 f_{i+1,j+1} fi+1,j+1
另一个是回到第一个左转的地方,放一个右儿子,那就是转移到 f i + 1 , j − 1 f_{i+1,j-1} fi+1,j1
很显然放的节点个数为 2 k − 1 2k-1 2k1,所以这个方法是能过的。


代码

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;
}

总结

在做树一类的 D P DP DP的时候,不要仅仅是想着从下往上转移,还要考虑一下按照 d f s dfs dfs序来转移。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EQ使用说明书 配置源程序 发布与运行 (1)将光盘\TM\02\EQ文件夹拷贝到Eclipse的工作空间。 (2)启动Eclipse。 (3)选择“文件”/“导入”菜单项,展开“常规”节点,选择“现有项目到工作空间”子节点,如图1.1所示。 图1.1 “导入”窗口 (4)单击【下一步】按钮,单击【浏览】按钮,选择程序所在目录,然后勾选“将项目复制到工作空间”复选框,如图1.2所示。 图1.2 “导入”窗口 (5)单击【完成】按钮。 (6)在项目上单击鼠标右键,依次选择“新建”/“文件夹”命令,新建一个“lib”文件夹,然后,将JavaDB数据库驱动文件“derby.jar”拷到该文件夹。在该文件上单击鼠标右键,选择“构建路径”/“添加至构建路径”命令。 (7)在导入工程的src文件,找到可执行的主类,在该类上单击鼠标右键,选择“运行方式”/“Java应用程序”项,如图1.3所示,完成程序配置 图1.3 选择菜单项 使用说明 系统介绍 企业内部通讯系统必须提供网络通讯功能、在通讯过程禁止使用聊天表情、文件传送等功能,避免资料外泄,或因发送错误而导致上级资料的丢失以及其他损失。最重要的是必须适应任何操作系统,也就是实现跨平台技术,因为企业内部的工作需要,工作环境使用了多个操作系统来完成不同的工作。另外,系统不需要使用服务器转和记录通讯内容,可以独立完成通讯任务,排除职工对领导监视工作进度等逆反心理。 操作流程 使用本程序时,请按以下步骤操作: (1)单击“系统设置”选项卡,设置系统、IP搜索范围和服务器登录设置。如图1.4所示。 图1.4 系统设置 图1.5 用户搜索 (2)单击“系统操作”选项卡,搜索新的用户,如图1.5所示,如果你知道对方的IP地址,单击“用户列表”选项卡,选一个用户单击鼠标右键弹出快捷菜单,如图1.6所示。在该菜单,可对用户信息进行添加、删除、用户更名、访问主机资源及公共程序等操作。 图1.5 系统操作 图1.6 使用信使发布消息 (3)如果对方未开启企业通信系统的情况下,向对方发送信史信息,如图1.6所示。 (4)本程序还支持群发功能,按住键盘上的<Ctrl>键,选择需要发送信息的人,然后,单击鼠标右键选择“信使群发”命令,进行信使群发操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值