zoukankan      html  css  js  c++  java
  • P1472 奶牛家谱 Cow Pedigrees

    题意:问你指定二叉树有几种

       1、高度为k

       2、节点数为n

       3、每个点的度为0或2

    爆搜-------》30分QAQ

    首先,因为每个节点度为0或2,

       所以如果n是偶数直接输出0就行了吧(嘿嘿)

    如果是奇数呢?

    设f[i][j]表示i个节点,高度$le$j的方案数

    那么$ans=f[n][k]-f[n][k-1]$(类似于前缀)

    转移$f[i][j]=f[t][j-1]*f[i-t-1][j-1]$

    枚举t,t个放左边,j-t-1个放右边,乘法原理,别忘取模

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    #define olinr return
    #define _ 0
    #define love_nmr 0
    #define DB double
    #define mod 9901
    inline int read()
    {
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch))
        {
            if(ch=='-')
                f=-f;
            ch=getchar();
        }
        while(isdigit(ch))
        {
            x=(x<<1)+(x<<3)+(ch^48);
            ch=getchar();
        }
        return x*f;
    }
    inline void put(int x)
    {
        if(x<0)
        {
            x=-x;
            putchar('-');
        }
        if(x>9)
            put(x/10);
        putchar(x%10+'0');
    }
    int n;
    int k;
    int f[250][250];
    int main()
    {
        n=read();
        k=read();
        if(!(n&1))
        {
            put(0);
            olinr ~~(0^_^0)+love_nmr;
        }
        for(int i=1;i<=k;i++)   //注意初始化
            f[1][i]=1;       
        for(int i=1;i<=k;i++)
            for(int j=3;j<=n;j+=2)  //奇数不存在
                for(int k=1;k<j;k+=2)
                    (f[j][i]+=f[k][i-1]*f[j-k-1][i-1])%=mod;
        put((f[n][k]-f[n][k-1]+mod)%mod);
        olinr ~~(0^_^0)+love_nmr;
    }
  • 相关阅读:
    Codeforces Round #581 (Div. 2)
    Codeforces Round #605 (Div. 3)
    cin,cin.get(),cin.getline(),getline()
    容斥原理原理
    词法分析器
    Web学习开始。
    Convex hull凸包
    对max_flow做一个总结
    Vue中动画封装
    Vue中的动画特效
  • 原文地址:https://www.cnblogs.com/olinr/p/9583247.html
Copyright © 2011-2022 走看看