正题
题目链接:https://www.luogu.com.cn/problem/CF9D
题目大意
求 个点组成的深度大于 的二叉树有多少个。
解题思路
定义
表示
个点高度为
的树有多少个,然后每次将两棵
合并就有
然后 转移即可。
好像可以用前缀和优化到 但是懒就不写了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=40;
ll n,k,ans,f[N][N];
int main()
{
scanf("%lld%lld",&n,&k);
f[0][0]=1;
for(ll i=1;i<=n;i++){
for(ll x=0;x<=i;x++)
for(ll y=0;y<i;y++)
for(ll b=0;b<i;b++)
f[i][max(y,b)+1]+=f[i-x-1][y]*f[x][b];
}
for(ll i=k;i<=n;i++)
ans+=f[n][i];
printf("%lld",ans);
}