zoukankan      html  css  js  c++  java
  • [P1472] 奶牛家谱 (DP)

    题意:给一棵度数为 0或 2的二叉树,求有 n个节点的深度为 k的二叉树的方案数;

    解法:DP;

    1.DP;我们可以设 f [ i ] [ j ] 表示有 i个节点的深度 <= j的二叉树的方案数,那么很显然,最后的答案就是 f [ n ] [ k ] - f [ n ] [ k - 1 ] ,那么状态转移方程该如何写呢?假设这整棵树有 x个节点,此时这棵树的深度为 k,那么除去根节点,我们可以枚举有 t个节点在左子树,有 x - 1 - t个节点在右子树,所以得出 f [ x ] [ k ] = ∑ ( f [ t ] [ k - 1 ] × f [ x - 1 - t ] [ k - 1 ] ) ;

    附上代码:

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    const int mod = 9901;
    
    int n,k;
    int f[210][210]; 
    
    int main()
    {
        scanf("%d%d",&n,&k);
        for(int i=1;i<=k;++i) f[1][i]=1;
        for(int x=1;x<=k;++x)
        for(int i=3;i<=n;i+=2)
        for(int j=1;j<i;j+=2) f[i][x]=(f[i][x]+(f[j][x-1]*f[i-j-1][x-1]%mod))%mod;
        cout<<(f[n][k]-f[n][k-1]+mod)%mod;
        return 0;
    }
  • 相关阅读:
    转 IDEA 解决代码提示功能消失
    模态框居中显示
    DetachedCriteria和Criteria的使用方法
    struts2配置文件详解
    springMVC上传图片
    在linux下运行mongodb
    webSocket客服在线交谈
    接口自动化
    easyui input文本框清除值
    Spring总结
  • 原文地址:https://www.cnblogs.com/nnezgy/p/11538407.html
Copyright © 2011-2022 走看看