青岛同拓网站建设有限公司,十大免费跨境软件,中山企业网站,开网站供免费下载正题
题目链接:https://www.luogu.com.cn/problem/CF9D 题目大意
求nnn个点组成的深度大于hhh的二叉树有多少个。 解题思路
定义fi,jf_{i,j}fi,j表示iii个点高度为jjj的树有多少个#xff0c;然后每次将两棵(a,b)(x,y)(a,b)(x,y)(a,b)(x,y)合并就有 fax1,max{b,y}1fa,b∗…正题
题目链接:https://www.luogu.com.cn/problem/CF9D 题目大意
求nnn个点组成的深度大于hhh的二叉树有多少个。 解题思路
定义fi,jf_{i,j}fi,j表示iii个点高度为jjj的树有多少个然后每次将两棵(a,b)(x,y)(a,b)(x,y)(a,b)(x,y)合并就有 fax1,max{b,y}1fa,b∗fx,yf_{ax1,max\{b,y\}1}f_{a,b}*f_{x,y}fax1,max{b,y}1fa,b∗fx,y
然后O(n4)O(n^4)O(n4)转移即可。
好像可以用前缀和优化到O(n3)O(n^3)O(n3)但是懒就不写了。 codecodecode
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
const ll N40;
ll n,k,ans,f[N][N];
int main()
{scanf(%lld%lld,n,k);f[0][0]1;for(ll i1;in;i){for(ll x0;xi;x)for(ll y0;yi;y)for(ll b0;bi;b)f[i][max(y,b)1]f[i-x-1][y]*f[x][b];}for(ll ik;in;i)ansf[n][i];printf(%lld,ans);
}