丛1~n的二叉搜索树个数=n个节点不同的二叉树个数

  1. 状态转移方程:i个节点的树个数=j个节点左子树个数*i-1-j个节点右子树个数

dp[i]+=dp[j]*dp[i-j-1];

  1. 出口:0个节点(空节点)、1个节点的二叉树个数都为1
using namespace std;
int main(){
    int n;
    cin>>n;
    int dp[n+1];
    dp[0]=1;
    dp[1]=1;
    for(int i=2;i<=n;i++){
        dp[i]=0;
        for(int j=0;j<i;j++)
            dp[i]+=dp[j]*dp[i-j-1];
    }
    cout<<dp[n]<<endl;
}