http://oj.leetcode.com/problems/unique-binary-search-trees/
int DP[1000];
int dp(int num){
if(num==1||num==0) return 1;
if(DP[num]>=0) return DP[num];
int res=0;
for(int i=0;i<num;i++){
res+=dp(i)*dp(num-i-1);
}
DP[num]=res;
return res;
}
class Solution {
public:
int numTrees(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
memset(DP,-1,sizeof(DP));
return dp(n);
}
};