Given n, how many structurally unique BST's (binary
search trees) that store values 1...n?
For example,
Given n = 3, there are a total of 5 unique BST's.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
一个简单的DP:
#include<iostream> #include<vector> #include<map> using namespace std; class Solution { public: int numTrees(int n) { int ans=0; map<int,int> rec; ans+=_cal(n,rec); return ans; } int _cal(int n,map<int,int>& rec) { if ( n==0 ) return 1; if ( n==1 ) return 1; map<int,int>::iterator it=rec.find(n); if ( it!=rec.end()) { return it->second; } int ans=0; for(int i=0;i<n;i++) { ans+=_cal(i,rec)*_cal(n-i-1,rec); } rec.insert(it,pair<int,int>(n,ans)); return ans; } }; int main() { int n; Solution so; while((cin>>n)&&n!=-1) { int ans=so.numTrees(n); cout << ans <<endl; } }