`
Simone_chou
  • 浏览: 185214 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Cow Pedigrees(DP)

 
阅读更多

Cow Pedigrees

Silviu Ganceanu -- 2003

 

Farmer John is considering purchasing a new herd of cows. In this new herd, each mother cow gives birth to two children. The relationships among the cows can easily be represented by one or more binary trees with a total of N (3 <= N < 200) nodes. The trees have these properties:

  • The degree of each node is 0 or 2. The degree is the count of the node's immediate children.
  • The height of the tree is equal to K (1 < K <100). The height is the number of nodes on the longest path from the root to any leaf; a leaf is a node with no children.

How many different possible pedigree structures are there? A pedigree is different if its tree structure differs from that of another pedigree. Output the remainder when the total number of different possible pedigrees is divided by 9901.

PROGRAM NAME: nocows

INPUT FORMAT

  • Line 1: Two space-separated integers, N and K.

SAMPLE INPUT (file nocows.in)

5 3

OUTPUT FORMAT

  • Line 1: One single integer number representing the number of possible pedigrees MODULO 9901.

SAMPLE OUTPUT (file nocows.out)

2

OUTPUT DETAILS

Two possible pedigrees have 5 nodes and height equal to 3:

           @                   @      
          / \                 / \
         @   @      and      @   @
        / \                     / \
       @   @                   @   @

 

   题意:

   给出 N(3 ~ 200)和 K(1 ~ 100),代表有 N 个结点,K 的深度。输出能有多少种满足 N 结点,K 深度的二叉树形态。结果要MODULO 9901。

 

   思路:

   DP。

   dp [ i ][ j ] 代表 i 节点 j - 1 深度的二叉树种数。small [ i ] [ j ] 代表 i 节点下小于等于 j 深度的种数有多少种。一颗二叉树可以由一个节点 + 两颗子树(左右子树)构成,那么 K 深度是由 K - 1深度来的,并且给出的结点一定会是奇数。故可以dp [ i ][ j ] 可以分成 3 种情况讨论:

   设左子树节点数为 p ,那么右子树节点数则为 N - p - 1;

   1.dp[ i ][ j ] += dp[ p ][ j - 1] + small[ N - p - 1 ][ j - 2];    由左子树深度为 j - 1,右子树深度小于 j - 1(即小于等于j - 2的)来构成;

   2.dp[ i ][ j ] += small[ p ][ j - 2] + dp[ N - p - 1 ][ j - 1];    由左子树深度小于 j - 1(即小于等于j - 2的),右子树深度为 j - 1 来构成;

   3.dp[ i ][ j ] += dp[ p ][ j - 1] + dp[ N - p - 1 ][ j - 1];        由左右子树深度都为 j - 1 深度来构成。

   

   AC:

/*
TASK:nocows
LANG:C++
ID:sum-g1
*/
#include<stdio.h>
#include<string.h>
int dp[205][105];
int small[205][105];

int main()
{
    freopen("nocows.in","r",stdin);
    freopen("nocows.out","w",stdout);
    int n,k;
    scanf("%d%d",&n,&k);
    memset(dp,0,sizeof(dp));
    dp[1][1] = 1;
    for(int i = 1;i <= k;i++)
        small[1][i] = 1;
    for(int i = 3;i <= n;i += 2)
    {
        for(int j = 2;j <= k;j++)
        {
            for(int l = 1;l < i;l += 2)
            {
                dp[i][j] += (dp[l][j - 1] * small[i - l - 1][j - 2] % 9901);
                dp[i][j] += (small[l][j - 2] * dp[i - l - 1][j - 1] % 9901);
                dp[i][j] += (dp[l][j - 1] * dp[i - l - 1][j - 1] % 9901);
            }
            dp[i][j] %= 9901;
            for(int l = j;l <= k;l++)
                small[i][l] += dp[i][j];
        }
    }
    printf("%d\n",dp[n][k]);
    return 0;
}

 

 

分享到:
评论

相关推荐

    Popgen_teaching_code

    Note kinship2 is needed only for drawing the pedigrees in IBD_pedigree and mvtnorm for the 2D fitness landscapes pkgs &lt;- c( " RColorBrewer " , " shiny " , " kinship2 " , " mvtnorm " ) dl_pkgs &lt;...

    historical_genomics:玉米历史基因组学

    这也包括“ Jeff_Inbred_pedigree-Howie2.xlsx”数据文件和“ Ames_pedigrees352014”,并且可能包含一些重复项。 Minn.csv 来自明尼苏达州的家谱数据来自Chris Schaefer博士论文的Rex Bernardo,原始文件是Crop ...

    ggenealogy:用于可视化家谱数据集的CRAN软件包

    ggenealogy:用于可视化家谱数据集的CRAN软件包

    基于matlab实现的指纹识别.rar

    基于matlab实现的指纹识别.rar

    node-v6.11.0-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v8.3.0-sunos-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    项目型制造企业生产计划规划设计方案.pptx

    项目型制造企业生产计划规划设计方案.pptx

    Swing界面开发和游戏开发.docx

    Swing界面开发和游戏开发.docx

    物流企业数字化转型暨五级信息化流程架构(L1-L5)规划建设方案.pptx

    物流企业数字化转型暨五级信息化流程架构(L1-L5)规划建设方案.pptx

    39黎秋菊.ipynb

    39黎秋菊.ipynb

    智力竞赛抢答器逻辑电路设计Multisim仿真

    本设计主要利用数字电子的知识设计的八人抢答器,随着电子技术的发展,它在各个领域的应用也越来越广泛。人们对它的认识也正逐步加深,从而利用电子技术以及相关的知识来解决一些实际问题。例如:智能抢答器的设计与制作。抢答器是智力竞赛活动中一种较为常见的装置。从原理上讲,它是一种典型的数字电路。并且,数字抢答器是由主体电路和扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出,主持人按开始按钮示意开始,以上两部分组成主体电路。在抢答电路中利用一个优先编码器译出最先抢到答题权的选手的编号并经LED显示器显示出来,同时还要封锁电路以防其他选手再抢答。当选手完成答题后,主持人将系统复位清除数据。

    基于matlab实现的HOG特征提取在进行SVM行人检测,经典算法.rar

    基于matlab实现的HOG特征提取在进行SVM行人检测,经典算法.rar

    arabic_PP-OCRv3_rec.onnx

    PP-OCR rec

    毕设基于机器学习的新闻标题分类系统源码+数据集+训练好的模型+项目操作说明.zip

    系统环境配置 Python:3.8.13 操作系统:Windows 数据库:MySQL Web框架:Flask 模型训练:sklearn 1.Anaconda创建虚拟环境 conda create -n Graduation python=3.8 命令行切换到对应目录 2.安装第三方库 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 3.将数据导入数据库 mysql -u root -p --local-infile=1 < D:\Bachelor_Graduation\Bachelor_Graduation.sql 二、模型训练 1.执行preprocess.ipynb 2.目录下自动生成model文件夹,里面存放训练好的模型pkl格式文件 三、系统启动 运行命令python main.py,在浏览器端输入127.0.0.1:5000即可 查看MySQL数据库中用户和管理员表可以得到用户名和密码,登录后可使用该系统

    此仓库用于对px4无人机的远程基础控制.zip

    无人机最强源码,无人机算法,易于部署和学习交流使用

    Rain Birdt Simple To Set Timer (SST) 使用说明书.pdf

    Rain Birdt Simple To Set Timer (SST) 使用说明书

    node-v10.15.1-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    BTL7-P511-M不锈钢外壳微脉冲位移传感器

    BTL7-P511-M_ _ _ _ -A B Y Z(8)-NEX-S32 KA _ _ II 3 G Ex ec IIC T4 Gc II 2 D Ex tb IIIC T135 °C Db BTL7-P511-M _ _ _ _ -CD-NEX-S32 KA _ _ Betriebsanleitung

Global site tag (gtag.js) - Google Analytics