`
zqynux
  • 浏览: 36809 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

USACO 2.3 Cow Pedigrees 奶牛家谱

阅读更多
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      @   @
        / \                     / \
       @   @                   @   @



USACO_2.3-2:Cow Pedigrees奶牛家谱

Time Limit:1000MS  Memory Limit:65536K
Total Submit:1 Accepted:1

Description

农民约翰准备购买一群新奶牛。 在这个新的奶牛群中, 每一个母亲奶牛都生两小奶牛。这些奶牛间的关系可以用二叉树来表示。这些二叉树总共有N个节点(3 <= N < 200)。这些二叉树有如下性质:

每一个节点的度是0或2。度是这个节点的孩子的数目。

树的高度等于K(1 < K < 100)。高度是从根到任何叶子的最长的路径上的节点的数目; 叶子是指没有孩子的节点。

有多少不同的家谱结构? 如果一个家谱的树结构不同于另一个的, 那么这两个家谱就是不同的。输出可能的家谱树的个数除以9901的余数。

Input

PROGRAM NAME: nocows

第1行: 两个空格分开的整数, N和K。

Output

第 1 行: 一个整数,表示可能的家谱树的个数除以9901的余数。

Sample Input


SAMPLE INPUT (file nocows.in)

5 3

Sample Output


SAMPLE OUTPUT (file nocows.out)

2


======================== 华丽的分割线 ========================
  题目是看懂了,, 意思就是说用N个节点构造一个高度为K的二叉树, 且每个节点的度不能为1(即只能要么有两个儿子, 要么就没有没有孩子.), 题目我是理解了, 也清楚得很是用DP.. 但是不太会做.. DP没学好.. (自卑中)
  终于吧DP返程看懂了.~!~!~! 狂High中..
  f[i][j] 代表用i各节点构成最多j层的二叉树有多少种情况, 那么
  f[i][j] = ∑(f[m][j-1] * f[i-1-m][j-1])(m = 1, 2, 3 ... i - 1)
  m是左子树的节点个数,, 那么i - m 就是除了左子树节点个数之外的节点个数, 再除根节点, 即 i - m - 1就是右子树的节点个数..
  代码能有两个优化的地方(我能够想到的只有这两个),
  第一个就是在DP方程中f[i][j] 和 f[m][j] 都一定是奇数, 因为如果是偶数的话就不能够构成题目所要求的二叉树了.
  第二个就是数据是能够对折的. 这个我晚点尝试一下.. 现在先把没折半的发一下吧.
/*
PROG: nocows
ID: zqy11001
LANG: C
*/
#include <stdio.h>

int f[200][100];

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



  刚刚写好了折半的,, 效率上不是特别的明显, 只是二三十毫秒的差别~~
  不知道怎么解释代码,, 没别的, 看吧:

/*
PROG: nocows
ID: zqy11001
LANG: C
*/
#include <stdio.h>

int f[200][100];

int main(void)
{
	int n, m;
	int i, j, k, c;
	freopen("nocows.in", "r", stdin);
	freopen("nocows.out", "w", stdout);
	scanf("%d%d", &n, &m);
	for(j = 1; j <= m; j++){
		f[1][j] = 1;
	}
	for(j = 2; j <= m; j++){
		for(i = 1; i <= n; i += 2){
			for(k = 1; (k << 1) <= i - 1; k += 2){
				if(k == i - k - 1){
					c = 1;
				}else{
				      	c = 2;
				}
				f[i][j] += c * f[k][j - 1] * f[i - k - 1][j - 1];
				f[i][j] %= 9901;
			}
		}
	}
	printf("%d\n", (9901 + f[n][m] - f[n][m - 1]) % 9901);
	return 0;
}

0
0
分享到:
评论

相关推荐

    usaco2.3解题报告1

    【标题】:“usaco2.3解题报告1”涉及的知识点主要集中在动态规划和数据结构上,特别是字符串处理和二叉树。 【描述】:“usaco2.3解题报告1”描述了一个生物学背景的问题,需要计算一个大写字母序列最长的前缀可以...

    USACO 题目

    USACO(美国计算机奥林匹克竞赛)是针对高中生的一项编程竞赛,旨在提高参赛者的算法设计、问题解决和编程技能。这个压缩包文件包含了USACO网站上的题目,对于准备机考和提升编程能力非常有帮助。下面我们将深入探讨...

    USACO1.4~2.3C语言题解

    《USACO1.4~2.3C语言题解》是针对USACO(美国计算机奥林匹克)编程竞赛中1.4至2.3阶段的题目解析,主要使用C语言进行解答。USACO旨在提升高中生的算法设计和编程能力,而C语言作为基础且高效的编程语言,常常被用于...

    usaco 源程序 section2.3---section 5.5

    这个压缩包包含了USACO章节2.3到5.5的源程序,涵盖了多个阶段的学习内容。 USACO的每个章节通常会讲解一个或多个编程概念,包括基础的算法、数据结构以及更复杂的主题。让我们详细探讨这些章节可能涉及的知识点: ...

    USACO英汉对照题目

    第三章涉及的题目如 "Longest Prefix"、"Cow Pedigrees" 和 "Money Systems",则可能包含字符串处理、图论和抽象数据类型,例如树和图的遍历。 第四章和第五章的题目,如 "Beef McNuggets"、"Fence Rails"、"Job ...

    usaco.rar_USACO 翻译 下载_usaco _usaco 翻译

    USACO,全称为United States阿Olympiad in Informatics,是美国计算机奥林匹克竞赛,旨在为高中生提供一个学习和展示编程技能的平台。这个比赛涵盖了算法、数据结构以及问题解决等多个方面,对于想要深入理解计算机...

    本人的USACO21JAN铜组Java代码

    USACO,全称为United States Computer Olympiad,是一项面向中学生的计算机编程竞赛,旨在提高参赛者的算法设计和问题解决能力。USACO的比赛通常分为青铜、白银、黄金和铂金四个等级,每个等级的比赛会有若干个题目...

    usaco 2010-2011

    ### USACO 2010-2011 季度竞赛概览与关键信息 #### 一、概述 美国计算机奥林匹克(USACO)是面向全球中学生的计算机科学竞赛,旨在发掘并培养计算机科学领域的年轻人才。USACO 2010-2011 季度竞赛于 2010 年 11 月...

    USACO题集及答案

    USACO,全称为United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者的算法设计、问题解决和编程能力。该比赛每年举行,分为青铜、白银、黄金和铂金四个级别,难度逐渐递增。...

    usaco 合集usaco 合集usaco 合集

    《USACO 合集:全面解析与学习指南》 USACO,全称为USA Computing Olympiad,是一项针对中学生举办的在线编程竞赛,旨在提升参赛者的算法设计和问题解决能力。这个合集提供了丰富的资源,包括英文原题、中文译题、...

    USACO翻译及题解

    USACO,全称United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者在算法设计、问题解决以及计算机科学基础方面的技能。这个压缩包文件提供了丰富的资源,帮助参赛者或学习者更好...

    usaco traning全部数据

    【标题】"usaco traning全部数据" 涉及的是一个编程竞赛训练平台——USACO(USA Computing Olympiad)的数据集。USACO是一个专门为美国中学生设计的在线编程竞赛,旨在提升参赛者的算法设计和编程能力,特别是在解决...

    USACO 1.1 c++源程序

    USACO,全称为United States Computer Olympiad,是一项面向中学生的国际性计算机编程竞赛,旨在提升参赛者的算法设计和编程能力。USACO比赛通常使用C++语言进行,因此"USACO 1.1 c++源程序"指的是USACO入门阶段1.1...

    USACO-Chapter1.rar_it_usaco

    《USACO入门指南——第一章解析》 USACO,全称USA Computing Olympiad,是美国计算机奥林匹克竞赛,旨在培养中学生在算法和编程方面的技能。对于初学者来说,USACO提供了很好的学习路径和挑战。本文将针对USACO的第...

    USACO历年比赛测试数据:2004年

    USACO,全称United States Computer Olympiad,是美国计算机奥林匹克竞赛,是一项旨在培养青少年编程技能和算法理解的国际性比赛。这个比赛对于有志于在计算机科学领域深入发展的学生来说,具有很高的学习价值和挑战...

    usaco历年测试数据

    USACO(美国计算机奥林匹克竞赛)是面向全球中学生的一项编程竞赛,主要涉及算法和问题解决能力。这个压缩包文件“usaco历年测试数据”包含了该赛事历年的测试题目和样例输入输出数据,这对于参赛者准备比赛或者提升...

    USACO全部测试数据.zip

    USACO,全称United States阿Olympiad in Computer Science,是美国计算机科学奥林匹克竞赛,旨在激发中学生对计算机科学的兴趣,尤其是算法和编程技能。这个"USACO全部测试数据.zip"压缩包包含了历年来USACO比赛的...

    USACO历年比赛测试数据:2003年

    USACO(USA Computing Olympiad)是美国计算机奥林匹克竞赛,是一项面向中学生的编程竞赛,旨在提升学生的算法设计、编程和问题解决能力。该比赛通常包括训练营和一系列在线比赛,最终选拔出优秀选手代表美国参加...

    USACO题解+代码+翻译

    USACO,全称United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者的算法设计、编程能力和问题解决能力。本压缩包包含了USACO比赛的题解、源代码以及对应的中文翻译,对于想要...

    USACO全部测试数据

    《USACO全部测试数据详解》 USACO,全称United States Computer Olympiad,是美国计算机奥赛,是一项旨在提升青少年计算机编程能力的竞赛。该竞赛覆盖了基础算法、数据结构、问题解决等多个计算机科学的重要领域,...

Global site tag (gtag.js) - Google Analytics