[CF9D] How many trees? - dp

Description

用 n 个点组成二叉树,问高度大于等于 h 的有多少个。\(h \le n \le 35\)

Solution

大于的不大好求,我们考虑求小于等于

\(f[i][j]\) 表示用 i 个点组成高度小于等于 j 的二叉树,有多少棵

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int N = 45;

int f[N][N], n, h;

signed main()
{
    ios::sync_with_stdio(false);
    cin >> n >> h;
    for (int i = 0; i <= n; i++)
        f[0][i] = 1, f[1][i] = i > 0;
    for (int i = 2; i <= n; i++)
        for (int j = 1; j <= n; j++)
            for (int k = 0; k <= i; k++)
                f[i][j] += f[k][j - 1] * f[i - k - 1][j - 1];
    cout << f[n][n] - f[n][h - 1] << endl;
}

相关文章:

  • 2022-12-23
  • 2022-03-03
  • 2021-07-31
  • 2022-12-23
  • 2022-12-23
  • 2021-09-18
  • 2022-02-25
猜你喜欢
  • 2021-12-16
  • 2021-06-11
  • 2022-01-25
  • 2022-02-05
  • 2021-05-21
  • 2022-03-06
相关资源
相似解决方案