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; }
相关推荐
第三章涉及的题目如 "Longest Prefix"、"Cow Pedigrees" 和 "Money Systems",则可能包含字符串处理、图论和抽象数据类型,例如树和图的遍历。 第四章和第五章的题目,如 "Beef McNuggets"、"Fence Rails"、"Job ...
Note kinship2 is needed only for drawing the pedigrees in IBD_pedigree and mvtnorm for the 2D fitness landscapes pkgs <- c( " RColorBrewer " , " shiny " , " kinship2 " , " mvtnorm " ) dl_pkgs <...
这也包括“ Jeff_Inbred_pedigree-Howie2.xlsx”数据文件和“ Ames_pedigrees352014”,并且可能包含一些重复项。 Minn.csv 来自明尼苏达州的家谱数据来自Chris Schaefer博士论文的Rex Bernardo,原始文件是Crop ...
《ggenealogy:绘制家谱数据的CRAN软件包详解》 在数据分析和可视化的领域中,R语言凭借其强大的工具库和丰富的社区支持,一直备受青睐。ggenealogy是R语言中的一个专门用于家谱数据可视化的软件包,它为用户提供了...
Jupyter-Notebook
考研公共课历年真题集-最新发布.zip
2006-2023年上市公司资产误定价Misp数据集(4.9万样本,含原始数据、代码及结果,最新).zip
Jupyter-Notebook
Jupyter-Notebook
100个Origin软件高效使用技巧大全-最新更新.zip
Jupyter-Notebook
煤矿感知数据联网接入规范 第2部分:重要设备
1、资源内容地址:https://blog.csdn.net/abc6838/article/details/143777985 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理
KSSJ_CJ15-2023
全国电子地图行政区划道路水系数据-最新shp.zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
全国乡镇级行政区划矢量数据2.0版-最新.zip
Jupyter-Notebook
Typora(version 1.2.3)导出 pdf 自定义水印的 frame.js 文件,详情可以查看:
【作品名称】:基于Java 实现的电脑鼠走迷宫的软件程序 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 迷宫地图生成算法的设计和实现 自动生成迷宫:根据迷宫生成算法自动生成一定复杂度的迷宫地图。 手动生成迷宫:根据文件中存储的固定数据生成迷宫地图。 单路径寻找算法的设计与实现:找出迷宫中一条单一的通路。 迷宫遍历算法的设计与实现:遍历迷宫中所有的可行路径。 最短路径计算算法的设计与实现:根据遍历结果,找出迷宫中所有通路中的最短通路。 (3)第二部分:界面展示部分 生成迷宫地图界面的设计与实现:根据生成的迷宫地图,用可视化的界面展现出来。 界面布局的设计与实现:根据迷宫程序的总体需求,设计和实现合理的界面布局。 相关迷宫生成过程和寻路算法在界面上的展现:将迷宫程序中的相关功能,跟界面合理结合,并采用一定的方法展 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。