题意:n个节点的树,处于同一层的节点大小必须一样,问共有多少种不同的形态。
思路:dp。dp(i)表示i个节点的树的答案。因为同层节点大小必须一样,在求dp(i)时,除去根,还有i-1个节点,然后枚举1~i-1中能整除i-1的数,加上即可。
#include<iostream>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<string.h>
#include<cstdio>
using namespace std;
int dp[1010];
int main(){
dp[1]=dp[2]=1;
for(int i=3;i<=1000;i++){
int t=i-1;
for(int j=1;j<=t;j++){
if(t%j==0)dp[i]+=dp[j];
dp[i]%=1000000007;
}
}
int n;
int cas=0;
while(cin>>n){
cas++;
printf("Case %d: %d\n",cas,dp[n]);
}
return 0;
}