SP8549 MAIN75 - BST again题解

随机寻找简单题增加估值/kel

只需要记忆化搜索即可,搜索的时候枚举左右儿子的子树大小。如果左右儿子子树大小相同需要特判一下。

题目要求树的高度为 hhh,可以转化为高度小于等于 hhh 的方案数减去高度小于等于 h−1h-1h−1 的方案数。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
int t,n,h;
int dp[505][505];
int dfs(int x,int y)
{
	if(y<0) return 0;
	if(dp[x][y]) return dp[x][y];
	if(x==0) return dp[x][y]=1;
	if(y==0) 
	{
		if(x<=1) return dp[x][y]=1;
		return dp[x][y]=0;
	}
	for(int j=0;j<=x-1;j++)
		if(x-1-j==j) dp[x][y]=(dp[x][y]+dfs(j,y-1)%mod)%mod;
		else dp[x][y]=(dp[x][y]+dfs(j,y-1)*1ll*dfs(x-1-j,y-1)%mod)%mod;
	return dp[x][y];
} 
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>t;
	while(t--)
	{
		cin>>n>>h; 
		cout<<((dfs(n,h)-dfs(n,h-1))%mod+mod)%mod<<"\n";//防止负数出现 
	}
	return 0;
}
相关推荐
xxwl5854 分钟前
第六章---计算几何
笔记·学习·算法
Logic1011 小时前
C语言/数据结构二维数组题解:找出行列O个数均为偶数的格子——奇偶性预处理+二次遍历
c语言·数据结构·算法·二维数组·时间复杂度·动态内存分配·奇偶性
程序猿阿森1 小时前
【机器学习实战】朴素贝叶斯算法详解:从概率基础到商品评论情感分析
算法·机器学习·概率论
余额瞒着我当琳1 小时前
哈希表底层原理解析,直接定址法,哈希冲突,负载因子,哈希函数,开放定址法
java·c++·哈希算法·散列表
xxwl5851 小时前
区域赛算法模版第五章---数学与数论
c++·笔记·算法
看浪的路人2 小时前
第6讲:Agent 安全体系——Prompt 注入防御、工具调用审计与输出合规
人工智能·算法
局部有解2 小时前
LeetCode Hot100 438 找到字符串中所有字母异位词
c++·算法·leetcode
垆边人似月.2 小时前
移动长度 k 子串使字符串变成回文
数据结构·算法
David猪大卫2 小时前
【C++修炼】string类:string类的模拟实现
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
pride.li2 小时前
第12章 Python 教程-流程控制:循环结构
linux·服务器·python·算法