HDU 4472 Count (DP)

时间:2023-03-08 23:53:00
HDU 4472 Count (DP)

题目:问n个节点构成完全对称的树有多少种方法。

因为树是完全对称的,所以它的子树也是完全对称的。

对于每个树,拿出一个根节点,枚举剩下的节点能拆分成多少个子树。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm> #define LL long long int using namespace std; const int MAXN = ;
const LL MOD = 1e9 + ; LL dp[MAXN]; int main()
{
dp[] = ;
for ( int i = ; i <= ; ++i )
{
int v = i - ;
for ( int j = ; j*j <= v; ++j )
if ( v % j == )
{
dp[i] = ( dp[i] + dp[j] ) % MOD;
if ( j * j != v )
dp[i] = ( dp[i] + dp[ v / j ] ) % MOD;
}
} int cas = ;
int n;
while ( scanf("%d", &n ) == )
{
printf("Case %d: %lld\n", ++cas, dp[n] );
}
return ;
}