hdu 4472 Count dp

来源:互联网 发布:原生js 移除class 编辑:程序博客网 时间:2024/05/16 01:07
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=1010;const int inf=1e9+7;int dp[N];int main(){int n;int Case=1;while(scanf("%d",&n)!=EOF){memset(dp,0,sizeof(dp));dp[1]=1;for(int i=2;i<=n;i++){for(int j=1;j<=i;j++){if((i-1)%j==0){dp[i]+=dp[j];dp[i]%=inf;}}}printf("Case %d: %d\n",Case++,dp[n]);}return 0;}
对于i来说,留下一个作为boss节点,对剩下的进行排列,要求是同一层具有相同的个数,枚举相同子树上的数量j,如果j符合条件则加上dp[j],dp[j]表示j个节点所有符合条件的数量,j有不同的符合条件的子树,这里是将剩下的分成(i-1)/j个j,当一个j形状改变是,其他j同时改变,就还是符合条件的了。
0 0