n, m = map(int, input().split(' '))
MOD = 10**9 + 7
from functools import lru_cache

def binary_tree(n, m):
    @lru_cache(maxsize=None)    # 去除缓存限制
    # k是节点数,h是高度
    def dfs(k, h):
        if k == 0:
            return 1
        if h == 0:
            return 0
        if k == 1:
            return 1
        
        total = 0
        for i in range(k):
            # h-1高度下 左子树和右子树的 方案数
            left = dfs(i, h-1)
            right = dfs(k-i-1, h-1)
            total = (total + left * right) % MOD
        return total
    return dfs(n, m) % MOD
print(binary_tree(n, m))
全部评论

相关推荐

燕山北:项目写点监控 可视化 高可用 自动化 不要总是写部署过什么,写点能够体现水平的
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务