zoukankan      html  css  js  c++  java
  • 一起来数二叉树吧

    链接:https://ac.nowcoder.com/acm/problem/13593
    来源:牛客网

    题目描述

    某一天,Zzq正在上数据结构课。老师在讲台上面讲着二叉树,zzq在下面发着呆。
    突然zzq想到一个问题:对于一个n个节点,m个叶子的二叉树,有多少种形态呐?你能告诉他吗?
    对于第一组样例的解释


    输入描述:

    每一组输入一行,两个正整数n,m(n<=50)意义如题目

    输出描述:

    每一行输出一个数,表示相应询问的答案取模1000000007
    示例1

    输入

    复制
    4 2
    10 5

    输出

    复制
    6
    252

    备注:

    a取模b等于a%b,即a除以b的余数

    看到本题应该很快的想到不同的二叉树,所以根据不同构的二叉树性质将其拆分成左子树和右子树的节点和叶节点.(离散学的不是很好,看了题解然后二刷后再写的)

     1 #define _CRT_SECURE_NO_WARNINGS
     2 #include<iostream>
     3 #include<algorithm>
     4 using namespace std;
     5 const int mod = 1000000007;
     6 long long dp[55][55] = {0};        //dp[n][[m]n代表左子树的节点,m代表左子树的叶节点
     7 int main()
     8 {
     9     int n, m;
    10     dp[0][0] = 1; dp[1][1] = 1;
    11     for(int i=1;i<51;i++)
    12         for(int j=1;j<51;j++)
    13             for(int x=0;x<=i-1;x++)
    14                 for (int y = 0; y <= x; y++)
    15                 {
    16                     if (y > j || i - x - 1 < 0) continue;
    17                     dp[i][j] = (dp[i][j] + (dp[x][y] % mod)*(dp[i - 1 - x][j - y] % mod) % mod)%mod;
    18                 }
    19     while (~scanf("%d%d", &n, &m))
    20     {
    21         printf("%lld\n", dp[n][m]);
    22     }
    23     
    24 }

    不足:还得多练习动态规划才行,目前动态规划的水平实在太差了

  • 相关阅读:
    Linux下如何从mysql数据库里导出导入数据
    安装好Pycharm后如何配置Python解释器简易教程
    Windows离线安装Python第三方库的方法
    时间输入框的测试方法
    doc转html
    pdf转png图片
    html转pdf
    html转pdf
    复习 注解反射
    Mybatis实现插入数据的时候将主键赋值给对象的两种方法
  • 原文地址:https://www.cnblogs.com/pppyyyzzz/p/11665759.html
Copyright © 2011-2022 走看看