[USACO Section 2.3] Cow Pedigrees (动态规划)
题目链接
Solution
我DP太菜啦...
考虑到一棵二叉树是由根节点以及左儿子和右儿子构成。
所以答案其实就是 左儿子方案数*右儿子方案数 。
状态定义:
\(f[i][j]\) 代表深度为 \(i\) ,节点个数为 \(j\) 的二叉树方案数。
转移方程:
对于每一个状态,节点总数已经确定。
那么枚举一维左子树的节点个数,右边用总数减去。
如果要构建一棵深度为 \(i\) 的二叉树,则两棵子树中必有一棵深度为 \(i-1\) 。
此时有三种情况:
- 左子树深度小于 \(i-1\),右子树深度为 \(i-1\)。
- 右子树深度小于 \(i-1\),左子树深度为 \(i-1\)。
- 两边子树深度均为 \(i-1\)。
由于我们需要的是深度小于 \(i-1\) 的所有情况,所以记录一个前缀和 \(sum\) 。
每一次要加上的便是 \(sum_{i-2}\) 。
然后参照以上做即可。
Code
#include<bits/stdc++.h>
using namespace std;
const int mod=9901;
int f[110][210],n,k,sum[110][210];
int main()
{
scanf("%d%d", &n, &k);
f[1][1]=1;
for (int i=2;i<=k;i++)
for (int j=1;j<=n;j++)
{
for (int p=1;p<j;p++)
{
f[i][j]=(f[i][j]+sum[i-2][p]*f[i-1][j-p-1])%mod;
f[i][j]=(f[i][j]+sum[i-2][j-p-1]*f[i-1][p])%mod;
f[i][j]=(f[i][j]+f[i-1][p]*f[i-1][j-p-1])%mod;
}
sum[i-1][j]=(sum[i-2][j]+f[i-1][j])%mod;
}
printf("%d\n", f[k][n]);
return 0;
}
[USACO Section 2.3] Cow Pedigrees (动态规划)的更多相关文章
- 【USACO 2.3】Cow Pedigrees(DP)
问n个结点深度为k且只有度为2或0的二叉树有多少种. dp[i][j]=dp[lk][ln]*dp[rk][j-1-ln],max(lk,rk)=i-1. http://train.usaco.org ...
- USACO 2.3 Cow Pedigrees
Cow Pedigrees Silviu Ganceanu -- 2003 Farmer John is considering purchasing a new herd of cows. In t ...
- 洛谷P1472 奶牛家谱 Cow Pedigrees
P1472 奶牛家谱 Cow Pedigrees 102通过 193提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 农民约翰准备 ...
- USACO 奶牛抗议 Generic Cow Protests
USACO 奶牛抗议 Generic Cow Protests Description 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约翰希望 ...
- USACO Section 2.3 奶牛家谱 Cow Pedigrees
OJ:http://www.luogu.org/problem/show?pid=1472 #include<iostream> using namespace std; const in ...
- USACO Cow Pedigrees 【Dp】
一道经典Dp. 定义dp[i][j] 表示由i个节点,j 层高度的累计方法数 状态转移方程为: 用i个点组成深度最多为j的二叉树的方法树等于组成左子树的方法数 乘于组成右子树的方法数再累计. & ...
- USACO Section2.3 Cow Pedigrees 解题报告 【icedream61】
nocows解题报告------------------------------------------------------------------------------------------ ...
- [USACO Section 5.3]量取牛奶 Milk Measuring (动态规划,背包$dp$)
题目链接 Solution 完全背包 \(dp\) , 同时再加一个数组 \(v[i][j]\) 记录当总和为\(j\) 时第 \(i\) 种物品是否被选. 为保证从小到大和字典序,先将瓶子按大小排序 ...
- [USACO Section 3.2] 01串 Stringsobits (动态规划)
题目链接 Solution 贼有意思的 DP, 也可以用组合数学做. \(f[i][j]\) 代表前 \(i\) 位,有 \(j\) 个 \(1\) 的方案数. 转移方程很简单 : \(f[i][j] ...
随机推荐
- python_105_类的特殊成员方法
aa.py class C(): def __init__(self): self.name='QiZhiguang' 类的特殊成员方法: # 1. __doc__ 表示类的描述信息 class Do ...
- CPP-基础:类的静态成员
一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员.和其他数据成员一样,静态数据成员也遵守public/protected/private访问规 ...
- Java Marker Interface
先看看什么是标记接口?标记接口有时也叫标签接口(Tag interface),即接口不包含任何方法. 在Java里很容易找到标记接口的例子,比如JDK里的Serializable接口就是一个标记接口. ...
- 【NOIP2017提高A组冲刺11.8】好文章
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> us ...
- pandas中数据聚合【重点】
数据聚合 数据聚合是数据处理的最后一步,通常是要使每一个数组生成一个单一的数值. 数据分类处理: 分组:先把数据分为几组 用函数处理:为不同组的数据应用不同的函数以转换数据 合并:把不同组得到的结果合 ...
- 初学者之 Git 和 Github
git和github是两个完全不同的概念. git 是一个版本管理工具,是可以在你电脑不联网的情况下,只在本地使用的一个版本管理工具,其作用就是可以让你更好的管理你的程序,比如你原来提交过的内容, ...
- 【mysql】【转发】[Err]1267 - Illegal mix of collations(utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,I
[Err]1267 - Illegal mix of collations(utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for o ...
- 有关Kali更新问题的解决方法。
近期更新源遭遇诸多不顺,无非是各种依赖问题的报错夹杂着各种稀奇古怪的问题,不过既然是玩Linux,就要做好处理各种疑难杂症的准备.经过了这几天的不断尝试,今天终于解决了更新出错的问题. 本人更新源出现 ...
- Applied Nonparametric Statistics-lec2
Ref: https://onlinecourses.science.psu.edu/stat464/print/book/export/html/3 The Binomial Distributio ...
- 《流畅的python》读书笔记,第一章:python数据模型
这本书上来就讲了魔法方法,也叫双下方法.特殊方法,通过两个例子对让读者了解了双下方法的用法,更重要的是,让我一窥Python的语言风格和给使用者的自由度. 第一个例子:一摞Python风格的纸牌: i ...