丛1~n的二叉搜索树个数=n个节点不同的二叉树个数
- 状态转移方程:i个节点的树个数=j个节点左子树个数*i-1-j个节点右子树个数
dp[i]+=dp[j]*dp[i-j-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;
}

京公网安备 11010502036488号