这个题,完全没想到是递推啊QAQ。
首先,在n个点里面拿出来一个点作为根节点,然后看剩下的点能不能均分,如果能均分,就继续看子树能不能均分,这样一直分下去,所以就是把能均分的子树的分法加到答案里。
#include <cstdio>
#include <vector>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
#include <iostream>
using namespace std;
const int mod=1e9+7;
const int maxn=1e3+2;
int ans[maxn];
int n,k;
int main()
{
ans[0]=0,ans[1]=1;
for(int i=1;i<=maxn;i++)
{
for(int j=1;j<i;j++)
{
if((i-1)%j==0)
{
ans[i]+=ans[j];
ans[i]%=mod;
}
}
}
while(scanf("%d",&n)!=EOF)
printf("Case %d: %d\n",++k,ans[n]);
return 0;
}