题意 输入n 统计有多少个n节点的有根树 使每个深度中所有节点的子节点数相同
例如 n=4 答案是3 n = 7 答案是 10
瞬间想到递推 第一层一定放一个 那么剩下 n-1 个节点 假设放 i 个 在下一层 为了满足 每个深度的所有节点的子节点数 相同 那么 ( n - 1 - i ) % i == 0
根据例子 f ( 4 ) = f ( 3 ) + f ( 1 )
f ( 7 ) = f ( 6 ) + f ( 3 ) + f ( 2 ) + f ( 1 )
直接打表 输出即可
#include <bits/stdc++.h>
using namespace std;
long long num[1005]={0};
void init()
{
int i,j;
num[1]=num[2]=1;
for(i=3;i<=1000;i++)
{
for(j=i-1;j>0;j--)
{
int x=i-1;
if((x-j)%j==0)
{
num[i]+=num[j];
num[i]%=1000000007;
}
}
}
}
int main()
{
int i,j,x,y,q,p,n,m;
init();
int k=1;
while(cin>>n)
{
cout<<"Case "<<k++<<": "<<num[n]<<endl;
}
return 0;
}