给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?
DP
/*
二叉查找树(搜索树):
根节点的值大于其左子树中任意一个节点的值,小于其右节点中任意一节点的值。
*/
int main()
{
int n;
cin>>n;
int sum[100] = {1};
// cout<<sum[0]<<endl;
sum[1] = 1;
sum[2] = 2;
for(int len=3; len<=n; len++){ // G(LEN) = SUM(F(ROOT, LEN))
sum[len] = 0;
for(int root=1; root<=len; root++){ // F(ROOT, LEN) = [1,ROOT-1] * [ROOT+1, LEN]
sum[len] += sum[root-1] * sum[len-root];
//cout<<"sum["<<len<<"] = "<<sum[len]<<endl;
}
}
cout<<sum[n]<<endl;
return 0;
}