其他分享
首页 > 其他分享> > [luogu*] CF9D How many trees? dp+计算树的总数

[luogu*] CF9D How many trees? dp+计算树的总数

作者:互联网

前言

传送门 :

思路

状态表示 ;
f [ n ] [ h ] f[n][h] f[n][h]表示 n n n个节点,高度大于等于 h h h的数量

状态计算
f [ i ] [ j ] = ∑ f [ i − k ] [ j − 1 ] ∗ f [ k ] [ j − 1 ] f[i][j] = \sum f[i-k][j-1]*f[k][j-1] f[i][j]=∑f[i−k][j−1]∗f[k][j−1]

因此最后答案就是
f [ n ] [ n ] − f [ n ] [ h − 1 ] f[n][n] - f[n][h-1] f[n][n]−f[n][h−1]

CODE

int f[N][N];

void solve()
{	
	cin>>n>>m;
	//当前节点
	for(int i =0;i<=n;i++)
	f[0][i] = 1;
	for(int i=1;i<=n;i++)//枚举高度
		for(int j=1;j<=n;j++)//枚举节点
			for(int k = 0;k<j;k++)//枚举左右节点
			f[j][i] += f[k][i-1]*f[j-k-1][i-1];
			
	cout<<f[n]n] -f[n][m-1];

}

标签:CODE,How,int,luogu,sum,trees,传送门,节点
来源: https://blog.csdn.net/qq_34364611/article/details/121276074