UVa 1645 (递推) Count

时间:2021-07-18 09:14:04

题意:

UVa 1645 (递推) Count

有多少个n个节点的有根树,满足每层节点的子节点个数相同,输出该数目除以1e9+7的余数。

分析:

这种题目就属于那种,看起来很高冷,读完题更高冷。想了N久想不出来,一搜题解,卧槽,这么sb的题我都不会。

言归正传,根据题意,这棵树是关于根节点对称的,对称性非常好,根节点下面的子树也完全相同。

所以就有了如下递推关系:

UVa 1645 (递推) Count

 #include <cstdio>
#include <cmath> const int maxn = ;
const int MOD = + ;
int ans[maxn + ]; void Init()
{
ans[] = ;
for(int i = ; i <= maxn; ++i)
{
int m = sqrt(i);
for(int j = ; j <= m; ++j) if((i-) % j == )
{
if(j * j == i - ) ans[i] = (ans[i] + ans[j]) % MOD;
else ans[i] = (((ans[i] + ans[j])%MOD) + ans[(i-)/j]) % MOD;
}
}
} int main()
{
Init();
int kase = , n;
while(scanf("%d", &n) == )
printf("Case %d: %d\n", ++kase, ans[n]); return ;
}

代码君