zoukankan      html  css  js  c++  java
  • USACO Cow Pedigrees

      题意是给你一个高度为k节点数为N的二叉树, 每个节点的孩子数为0或者2,让你求出这样的二叉树的数量模9901,我们定义f[i][j]为i个节点构成高度不超过j的二叉树的数量, 那么f[i][j] = f[k][j-1]*f[i-1-k][j-1](乘法原理, 除掉根节点, 左儿子有k个节点,右儿子就有i-1-k个节点) ,由于每个节点的孩子书为0或者2, 那么i-1-k>=1 =>k<=i-2 又k>=1  =》 1<=k<=i-2.根据我们的定义答案就有(f[N][k] - f[N][k-1] + 9901)%9901防止负数的出现,代码如下:

    /*
        ID: m1500293
        LANG: C++
        PROG: nocows
    */
    
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    int f[300][300];   //用n个节点做成深度小于等于j的二叉树的种类数
    
    int main()
    {
        freopen("nocows.in", "r", stdin);
        freopen("nocows.out", "w", stdout);
        int N, K;
        scanf("%d%d", &N, &K);
        for(int j=1; j<=K; j++) f[1][j] = 1;
        for(int j=2; j<=K; j++)       //深度为j
        for(int i=1; i<=N; i++)       //节点数为i
        {
            for(int k=1; k<=i-2; k++)
                f[i][j] = (f[i][j] + f[k][j-1]*f[i-1-k][j-1])%9901;
        }
        printf("%d
    ", (f[N][K]-f[N][K-1]+9901)%9901);
        return 0;
    }
  • 相关阅读:
    纪伯伦:我曾七次鄙视我的灵魂
    字典和集合
    元组
    列表
    字符串
    数值类型
    内置函数了解一下
    了解Python
    centos7安装mysql数据库
    xenserver 上传centos6.8镜像
  • 原文地址:https://www.cnblogs.com/xingxing1024/p/5076843.html
Copyright © 2011-2022 走看看