题意:求n个节点的有根数,有多少种情况满足每个深度中所有节点的子节点个数相同。
设d[n]为有n个节点的满足题意的个数。
可以这样考虑,根节点儿子的个数为i的情况有d[(n-1)/i]种,i整除(n-1).
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <cmath>
#include <set>
#include <queue>
using namespace std;
const int INF=1e9+10;
const double EPS = 1e-10;
typedef long long ll;
const int mod=1e9+7;
int d[1005];
int main(){
int n,m;
d[1]=1;
for(int i=1;i<=1000;i++)
for(int j=1;j*i+1<=1000;j++){
d[i*j+1]=(1LL*d[i*j+1]+d[i])%mod;
}
int cas=1;
while(scanf("%d",&n)!=EOF){
printf("Case %d: %d\n",cas++,d[n] );
}
return 0;
}