Unique Binary Search Trees-计算表示相同序列的不同BST个数

题目描述:
给定整数n,计算存储序列为1...n的结构唯一的BST的个数
题目来源
http://oj.leetcode.com/problems/unique-binary-search-trees/
题目分析:
对于一个表示序列为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];
}

 

posted @ 2013-09-27 20:18  代金桥  阅读(282)  评论(0编辑  收藏  举报