3914. 【NOIP2014模拟11.2B组】人品问题
Description
网上出现了一种高科技产品——人品测试器。只要你把你的真实姓名输入进去,系统将自动输出你的人品指数。yzx不相信自己的人品为0。经过了许多研究后,yzx得出了一个更为科学的人品计算方法。这种方法的理论依据是一个非常重要的结论:人品具有遗传性。因此,一个人的人品完全由他的祖先决定。yzx提出的人品计算方法相当简单,只需要将测试对象的k个祖先的人品指数(可能为负数)加起来即可。选择哪k个祖先可以由测试者自己决定,但必须要满足这个要求:如果除自己的父母之外的某个祖先被选了,那么他的下一代必需要选(不允许跳过某一代选择更远的祖先,否则将失去遗传的意义)。
非常不幸的是,yzx测试了若干次,他的人品值仍然不能为一个正数。现在yzx需要你帮助他找到选择祖先的最优方案,使得他的人品值最大。
Input
第一行是两个用空格隔开的正整数n和k,其中n代表yzx已知的家谱中共有多少人(包括yzx本身在内),k的意义参见问题描述。
第二行有n-1个用空格隔开的整数(可能为负),这些数的绝对值在2^15以内。其中,第i个数表示编号为i+1的人的人品值。我们规定,编号为1的人是yzx。
接下来n行每行有两个用空格隔开的数,其中第i行的两个数分别表示第i个人的父亲和母亲的编号。如果某个人的父亲或母亲不在这个家谱内,则在表示他的父亲或母亲的编号时用0代替。
除yzx以外的所有人都是yzx的祖先,他们都会作为父亲或母亲被描述到。每个人都不可能同时作为多个人的父亲或者是母亲。
Output
一个整数,表示yzx能够得到的最大人品值。
Sample Input
6 3
-2 3 -2 3 -1
2 3
4 5
0 6
0 0
0 0
0 0
Sample Output
4
样例说明下图显示了输入样例所描述的家谱图。括号里的数表示的是该人的人品值。4(-2) 5(3) 6(-1)\ / /\ / /2(-2) 3(3)\ /\ /1 <---yzx显然,选择祖先2、3、5能使yzx的人品值达到最大。这个最大值为4,表示yzx能够得到的最大人品值。
Data Constraint
50%的数据,n<=10。
100%的数据,n<=100。
Solution
树形DP。
设f[i][j]表示到点i,选了j个点的最大人品值。
f [ i ] [ j ] = max{ f [ lson ] [ l ]+ f [ rson ] [ j - l ] }( 0=< l < k )
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 110
using namespace std;
int n,k,a[N],l[N],r[N],f[N][N],inf;
void dg(int x){f[x][1]=a[x];if(l[x]) dg(l[x]);if(r[x]) dg(r[x]);for(int i=2;i<=k+1;i++){for(int j=0;j<=i-1;j++){if(f[l[x]][j]!=inf&&f[r[x]][i-j-1]!=inf) f[x][i]=max(f[x][i],a[x]+f[l[x]][j]+f[r[x]][i-j-1]);}}
}
int main(){scanf("%d%d",&n,&k);for(int i=2;i<=n;i++) scanf("%d",&a[i]);memset(f,129,sizeof(f));inf=f[0][0];for(int i=1;i<=n;i++){scanf("%d%d",&l[i],&r[i]);f[i][0]=0;}f[0][0]=0;dg(1);printf("%d\n",f[1][k+1]);return 0;
}
作者:zsjzliziyang
QQ:1634151125
转载及修改请注明
本文地址:https://blog.csdn.net/zsjzliziyang/article/details/86629036
3914. 【NOIP2014模拟11.2B组】人品问题相关推荐
- 【NOIP2014模拟11.2B组】人品问题
Description 网上出现了一种高科技产品--人品测试器.只要你把你的真实姓名输入进去,系统将自动输出你的人品指数.yzx不相信自己的人品为0.经过了许多研究后,yzx得出了一个更为科学的人品计 ...
- 【NOIP2014模拟11.2B组】超氧化钾
非常sb的一道题~比赛切掉的我~ Description 作为一个化学小考只有77分的同学,小W感觉很有压力,所以他决定搞化学.今天他开始研究超氧化钾,这是一种很神奇的离子化合物,在高温下空间结构是立 ...
- JZOJ 3912. 【NOIP2014模拟11.2B组】超氧化钾
Are you ready? 题目: 题意: 分析: 代码: 题目: 传送门 题意: 给定你xxx.yyy,求按照题目给出的z=xz=xz=x modmodmod 1+x1+x1+x modmodmo ...
- 3912. 【NOIP2014模拟11.2B组】超氧化钾
Description 作为一个化学小考只有77分的同学,小W感觉很有压力,所以他决定搞化学.今天他开始研究超氧化钾,这是一种很神奇的离子化合物,在高温下空间结构是立方体,如下图所示.有一天教黄交给了 ...
- 3913. 【NOIP2014模拟11.2B组】艰难的选择
Description Yzx已经当过多次"媒人"了.他因此获得了许多经验.例如,距Yzx观察,身高相近的人似乎比较合得来. Yzx在学校策划了一次大型的"非常男女&qu ...
- jzoj2702. 探险jzoj3917. 【NOIP2014模拟11.2A组】福慧双修
Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...
- 3917 【NOIP2014模拟11.2A组】福慧双修 (Standard IO)题解
目录 目录 原题 Description Input Output Sample Input Sample Output Data Constraint 题解 40分 100分 模型转换 做法 I I ...
- 【NOIP2014模拟11.2A组】福慧双修
题意 给定一个图,要我们从1号点出发,经过一系列点后重新回到1点,求出最短距离是多少,限制是每条边只能通过一次. 分析 对于这种求最短路径的题,我们一开始当然是想到SPFA,DIJ等一些列的求最短路算 ...
- 【NOIP2014模拟11.1B组】吴传之火烧连营(tree)
题目大意 对于一个序列,多次询问求在 xor K 的情况下最大值. 分析 我们将每一个数拆分成 2 进制,然后映射进一棵 trie 中,然后对于每个询问,根据异或的性质(1 xor 1=0,1 xor ...
最新文章
- 虚拟机cenos 重置密码
- pytorch中tensor的unsqueeze()函数和squeeze()函数的用处
- 求栈中元素个数算法_每日算法系列【LeetCode 315】计算右侧小于当前元素的个数...
- 各浏览器内核与C#WinForm开发Demo
- php 中set是什么_php中set
- 1.7 空间正交分解
- 复试计算机网络与软件工程,2018华南理工大学软件工程复试经验贴
- 如何利用.NET Core搭建跨平台的控制台应用程序
- “左手5G右手AI”,任正非推崇的王喜文在华为这样说
- python字符串编码_Python字符串编码答疑
- python函数参数定义顺序_18 Python - 函数定义与参数
- C++两个函数可以相互递归吗_通俗讲:数据结构递归思想
- 正则表达式 - php正则匹配内容?
- 给用户配置hadoop权限
- 演化博弈论----gyy参考总结
- qq音乐网络异常获取音乐失败_qq音乐网络异常获取音频失败怎么办
- 微信公众号插入公式介绍
- idea文档注释的快捷键带参数
- ES5和ES6的继承有哪些优劣?
- Oracle sql创建序列sequence