【动态规划】【USACO】Cow Pedigrees

来源:互联网 发布:北京平均收入 知乎 编辑:程序博客网 时间:2024/05/09 21:18

 

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 <= N < 200)。这些二叉树有如下性质:

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


树的高度等于K(1 < K < 100)。高度是从根到最远的那个叶子所需要经过的结点数; 叶子是指没有孩子的节点。

 

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

格式

PROGRAM NAME: nocows


INPUT FORMAT (file nocows.in)


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

 

OUTPUT FORMAT (file nocows.out)


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

SAMPLE INPUT

5 3

SAMPLE OUTPUT

2

OUTPUT DETAILS

有5个节点,高为3的两个不同的家谱:

             @                    @          / /                  / /         @   @      和          @  @        / /                      / /       @   @                    @  @
来自"http://www.nocow.cn/index.php/Translate:USACO/nocows"

用f[i][j]表示i个节点最多j层所能达到的种类数
如果表示i个节点正好j层的话,f[i][j]无法进行更新,因为影响状态无法进行确定。总之不好写。
输出的时候 即输出 f[n][k]-f[n][k-1]
注意由于mod运算,可能出负数

 

原创粉丝点击