zoukankan      html  css  js  c++  java
  • HDU 4472 Count

    $dp$。

    设$dp[i][j]$表示包含$i$个节点的最后一层有$j$个节点的树有多少种。

    递推很简单,如果$j\% k =  = 0$,那么$dp[i][j]$就要加上$dp[i-j][k]$的方案。

    本地跑大约$500-600ms$左右的时间就可以打完表了,$sumbit$发现跑了$900$多$ms$。

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    const double pi=acos(-1.0),eps=1e-8;
    
    int dp[1005][1005],ans[1005];
    int mod=1e9+7;
    
    int main()
    {
        dp[1][1]=1; ans[1]=1;
        for(int i=2;i<=1000;++i)
        {
            for(int j=1;j<=i-1;++j)
            {
                for(int k=1;k<=j;++k)
                {
                    if(j%k==0)
                        dp[i][j]=(dp[i][j]+dp[i-j][k])%mod;
                }
                ans[i]=(ans[i]+dp[i][j])%mod;
            }
        }
    
        int cas=1,n;
        while(scanf("%d",&n)!=EOF)
        {
            printf("Case %d: %d
    ",cas++,ans[n]);
        }
    
        return 0;
    }
  • 相关阅读:
    又回来咯
    4 20210412-1 原型设计作业
    3 20210405-1 案例分析作业
    202103226-1 编程作业
    阅读任务
    准备工作
    原型设计作业
    案例分析
    编程作业
    构建之法读后感
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5816106.html
Copyright © 2011-2022 走看看