博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unique Binary Search Trees-计算表示相同序列的不同BST个数
阅读量:6902 次
发布时间:2019-06-27

本文共 733 字,大约阅读时间需要 2 分钟。

题目描述: 给定整数n,计算存储序列为1...n的结构唯一的BST的个数
题目来源
题目分析: 对于一个表示序列为1...n的BST,根元素可以是1到n中的任何一个数,当根元素为 i 时,左子树为表示1...i - 1的BST,右子树为表示i + 1...n的BST,所以,原问题可以通过子问题的解得到 定义状态f(i,j),状态f(i,j)为表示序列i...j的结构唯一的BST的个数,通过枚举根的值可以得到: f(i,j) = sum(f(i,k - 1) * f(k + 1, j))(i <= k <= j)
时间复杂度:O(n^3)
示例代码:
int dp[100][100];int numTrees(int n) {    memset(dp, 0, sizeof(dp));    for(int i = 1; i <= n; ++i)        dp[i][i - 1] = dp[i + 1][i] = 1;    for(int len = 1; len <= n; ++len) {        for(int i = 1; i <= n - len + 1; ++i) {            for(int k = i; k <= i + len - 1; ++k) {                dp[i][i + len - 1] += dp[i][k - 1] * dp[k + 1][i + len - 1];            }        }    }    return dp[1][n];}

 

转载于:https://www.cnblogs.com/daijinqiao/p/3343523.html

你可能感兴趣的文章
USACO题目——Transformations
查看>>
除了 UCAN 发布的鹿班和普惠体,这些设计工具也来自阿里
查看>>
转载----Python正则表达式指南
查看>>
.Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数
查看>>
HDU 1394 Minimum Inversion Number 线段树
查看>>
Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
查看>>
ssm框架整合
查看>>
C/C++里自带提供的整数进制转换的几种方式(转载)
查看>>
JAVA类加载顺序
查看>>
数据结构复习
查看>>
JSONPlaceholder - 免费的在线REST服务(提供测试用的HTTP请求假数据)
查看>>
今天购买了一个云服务器
查看>>
C#以管理员身份运行程序
查看>>
关于学习uCOS-II
查看>>
BZOJ3572:[HNOI2014]世界树——题解
查看>>
inline 函数
查看>>
[摘录]遇见未知的自己(二)
查看>>
python基础===修改idle的输入风格
查看>>
对Linux下TCP连接相关配置的优化记录(转载)
查看>>
微信里如何判断页面被分享成功
查看>>