题意:求n个节点的有根数,有多少种情况满足每个深度中所有节点的子节点个数相同。
也就是说,每个节点的所有子树都是相同的,dp[i] = sum(dp[k] * j + 1),k * j + 1 = i。最终的结果还要求鱼
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int dp[1005];
int m = 1000000007;
int main() {
int i, j, n;
dp[1] = 1;
for(i = 1; i < 1000; i++) {
for(j = 1; j * i < 1000; j++) {
dp[j * i + 1] = (dp[i] + dp[j * i + 1]) % m;
}
}
j = 1;
while(~scanf("%d", &n))
printf("Case %d: %d\n", j++, dp[n]);
return 0;
}