luogu P1472 奶牛家谱 Cow Pedigrees
link : https://www.luogu.com.cn/problem/P1472
这题是用来智力康复的
这种题 这种题如果我没有一眼看出来我就把这个电脑屏幕💻吃掉
谢罪ing
考虑DP
直接求深度恰好为k的不好求
可以求深度<=k的,然后减一下
设
f
[
i
]
[
l
e
v
]
表
示
用
了
i
个
点
,
层
数
<
=
l
e
v
的
方
案
数
设f[i][lev]表示用了i个点,层数<=lev的方案数
设f[i][lev]表示用了i个点,层数<=lev的方案数
枚举分给左子树j个节点然后
易
得
f
[
i
]
[
l
e
v
]
=
∑
f
[
j
]
[
l
e
v
−
1
]
∗
f
[
i
−
j
−
1
]
[
l
e
v
−
1
]
易得f[i][lev]=\sum f[j][lev-1]*f[i-j-1][lev-1]
易得f[i][lev]=∑f[j][lev−1]∗f[i−j−1][lev−1]
然后这题就没了
code:
#include<bits/stdc++.h>
#define mod 9901
using namespace std;
int n, k, f[505][505];
int main() {
scanf("%d%d", &n, &k);
for(int i = 1; i <= k; i ++) f[1][i] = 1;
for(int lev = 2; lev <= k; lev ++)
for(int i = 3; i <= n; i += 2)
for(int j = 1; j < i; j += 2)
f[i][lev] += f[j][lev - 1] * f[i - j - 1][lev - 1] % mod, f[i][lev] %= mod;
printf("%d", (f[n][k] - f[n][k - 1] + mod) % mod);
return 0;
}