前言
思路
状态表示 ;
f
[
n
]
[
h
]
f[n][h]
f[n][h]表示
n
n
n个节点,高度大于等于
h
h
h的数量
状态计算
f
[
i
]
[
j
]
=
∑
f
[
i
−
k
]
[
j
−
1
]
∗
f
[
k
]
[
j
−
1
]
f[i][j] = \sum f[i-k][j-1]*f[k][j-1]
f[i][j]=∑f[i−k][j−1]∗f[k][j−1]
因此最后答案就是
f
[
n
]
[
n
]
−
f
[
n
]
[
h
−
1
]
f[n][n] - f[n][h-1]
f[n][n]−f[n][h−1]
CODE
int f[N][N];
void solve()
{
cin>>n>>m;
//当前节点
for(int i =0;i<=n;i++)
f[0][i] = 1;
for(int i=1;i<=n;i++)//枚举高度
for(int j=1;j<=n;j++)//枚举节点
for(int k = 0;k<j;k++)//枚举左右节点
f[j][i] += f[k][i-1]*f[j-k-1][i-1];
cout<<f[n]n] -f[n][m-1];
}