[USACO2.3]奶牛家谱 Cow Pedigrees
2017-07-17 13:10
246 查看
题目描述
农民约翰准备购买一群新奶牛。 在这个新的奶牛群中, 每一个母亲奶牛都生两个小奶牛。这些奶牛间的关系可以用二叉树来表示。这些二叉树总共有N个节点(3 <= N < 200)。这些二叉树有如下性质:每一个节点的度是0或2。度是这个节点的孩子的数目。
树的高度等于K(1 < K < 100)。高度是从根到最远的那个叶子所需要经过的结点数; 叶子是指没有孩子的节点。
有多少不同的家谱结构? 如果一个家谱的树结构不同于另一个的, 那么这两个家谱就是不同的。输出可能的家谱树的个数除以9901的余数。
输入输出格式
输入格式:两个空格分开的整数, N和K。
输出格式:
一个整数,表示可能的家谱树的个数除以9901的余数。
输入输出样例
输入样例#1:5 3
输出样例#1:
2
说明
/*
ID:luojiny1
LANG:C++
TASK:nocows
*/
#include<cstdio>
#include<cstring>
const int maxn=210,maxh=110;
int d[maxh][maxn]={0},f[maxh][maxn]={0},n,h,c;
int main()
{
freopen("nocows.in","r",stdin);
freopen("nocows.out","w",stdout);
scanf("%d%d",&n,&h);
d[1][1]=1;
for(int i=2;i<=h;i++)
{
for(int j=1;j<=n;j+=2)
{
for(int k=1;k<=j-1-k;k+=2)
{
if(k!=j-1-k)c=2;else c=1;
d[i][j]+=c*(
f[i-2][k]*d[i-1][j-1-k]+//左边子树小于i-1 右边子树i-1
d[i-1][k]*f[i-2][j-1-k]+//右边子树小于i-1 左边子树i-1
d[i-1][k]*d[i-1][j-1-k]);//左右两边都为i-1
d[i][j]%=9901;
}
}
for(int k=1;k<=n;k++)f[i-1][k]=(f[i-2][k]+d[i-1][k])%9901;
}
printf("%d\n",d[h]
);
}
相关文章推荐
- 【USACO题库】2.3.2 Cow Pedigrees奶牛家谱 题解
- 【USACO题库】2.3.2 Cow Pedigrees奶牛家谱
- usaco2.3.2奶牛家谱
- USACO 2.3 Cow Pedigrees (DP动态规划)
- 【USACO2.3.2】奶牛家谱 动态规划
- usaco奶牛家谱
- USACO-Section2.3 Cow Pedigrees【动态规划】
- dp——洛谷 P1472 奶牛家谱 Cow Pedigrees
- USACO section2.3 Cow Pedigrees题解&代码
- 【USACO2.3.2】奶牛家谱 BSOJ2086 洛谷P1472 CODEVS2053
- USACO 2.3 Cow Pedigrees(DP)
- 【USACO 2.3.2】奶牛家谱
- USACO Section2.3 Cow Pedigrees 解题报告 【icedream61】
- 【USACO TRAINING】奶牛家谱
- 【DP】洛谷 P1472 奶牛家谱 Cow Pedigrees
- USACO 2.3 Cow Pedigrees 题解
- 洛谷P1472 奶牛家谱 Cow Pedigrees
- 洛谷 P1472 奶牛家谱 Cow Pedigrees
- 2.3.2 COW PEDIGREES 奶牛家谱
- [luoguP1472] 奶牛家谱 Cow Pedigrees(DP)