人品问题

题目描述

网上出现了一种高科技产品——人品测试器。只要你把你的真实姓名输入进去,系统将自动输出你的人品指数。yzx不相信自己的人品为0。经过了许多研究后,yzx得出了一个更为科学的人品计算方法。这种方法的理论依据是一个非常重要的结论:人品具有遗传性。因此,一个人的人品完全由他的祖先决定。yzx提出的人品计算方法相当简单,只需要将测试对象的k个祖先的人品指数(可能为负数)加起来即可。选择哪k个祖先可以由测试者自己决定,但必须要满足这个要求:如果除自己的父母之外的某个祖先被选了,那么他的下一代必需要选(不允许跳过某一代选择更远的祖先,否则将失去遗传的意义)。

非常不幸的是,yzx测试了若干次,他的人品值仍然不能为一个正数。现在yzx需要你帮助他找到选择祖先的最优方案,使得他的人品值最大。

输入格式

第一行是两个用空格隔开的正整数n和k,其中n代表yzx已知的家谱中共有多少人(包括yzx本身在内),k的意义参见问题描述。

第二行有n-1个用空格隔开的整数(可能为负),这些数的绝对值在2^15以内。其中,第i个数表示编号为i+1的人的人品值。我们规定,编号为1的人是yzx。

接下来n行每行有两个用空格隔开的数,其中第i行的两个数分别表示第i个人的父亲和母亲的编号。如果某个人的父亲或母亲不在这个家谱内,则在表示他的父亲或母亲的编号时用0代替。

除yzx以外的所有人都是yzx的祖先,他们都会作为父亲或母亲被描述到。每个人都不可能同时作为多个人的父亲或者是母亲。

输出格式

一个整数,表示yzx能够得到的最大人品值。

输入样例

6 3

-2 3 -2 3 -1

2 3

4 5

0 6

0 0

0 0

0 0

输出样例

4

样例说明

下图显示了输入样例所描述的家谱图。括号里的数表示的是该人的人品值。

4(-2)  5(3)  6(-1)

\   /    /

\ /     /

2(-2)   3(3)

\   /

\ /

1<---yzx

显然,选择祖先2、3、5能使yzx的人品值达到最大。这个最大值为4,表示yzx能够得到的最大人品值。

数据规模

50%的数据,n<=10。

100%的数据,n<=100。

拿到数据范围之后,首先考虑暴力做法,(暴力做法就是暴利做法啊)

由于只有10个,把其中所有的选出三个的方法都试一遍,并且检验祖先关系,这样子50分就可以到手

正解当然是treedp

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<limits.h>
using namespace std;
const int maxn=105;
int fr[maxn],mr[maxn];
int rp[maxn];
int n;
int dp[105][105];
bool used[105][105];
int inf=-135451;
int dfs(int nw,int am)
{if(used[nw][am]){return dp[nw][am]; }  //用过了当然不管 if(!am){return dp[nw][am]=0;}//没有了,这样子就是0嘛,dp值也是0 //不用担心负值,这样子只是不选取的情况 if(!nw){return dp[nw][am]=inf;}//到0了,这个不可以到达,所以返回负的无穷大 if(am==1){return dp[nw][am]=rp[nw];}//只剩一个了,不用分配,就是rp int cmax=inf;for(int i=0;i<am;i++){int tmp=rp[nw]+dfs(fr[nw],am-i-1)+dfs(mr[nw],i);//给两个节点分配的数量 cmax=max(cmax,tmp);//最大人品 }used[nw][am]=1;dp[nw][am]=cmax;return cmax;
}
int k;
int main()
{cin>>n>>k;for(int i=2;i<=n;i++)scanf("%d",&rp[i]);for(int i=1;i<=n;i++){scanf("%d %d",&fr[i],&mr[i]);}int ans=dfs(1,k+1);cout<<ans<<endl;} 

TYZ 8/22 人品问题相关推荐

  1. [树形dp] Jzoj P3914 人品问题

    Description 网上出现了一种高科技产品--人品测试器.只要你把你的真实姓名输入进去,系统将自动输出你的人品指数.yzx不相信自己的人品为0.经过了许多研究后,yzx得出了一个更为科学的人品计 ...

  2. mysql偏移注入_移位溢注:告别靠人品的偏移注入

    *本文原创作者:SeagullGR,本文属FreeBuf原创奖励计划,未经许可禁止转载 在Access数据库类型注入的时候,我们获取不到列名(前提是有表名),一般会选择使用偏移注入,但是这种注入方式往 ...

  3. 移位溢注:告别依靠人品的偏移注入

    介绍: 在Access数据库类型注入的时候,我们获取不到列名(前提是有表名),一般会选择使用偏移注入,但是这种注入方式往往借助的是个人的人品,且步骤繁琐.本文中我们研究了一种新的注入技术让" ...

  4. 2017.05.22 房多多 曾熙闭门会

    由树杨Yang整理 房多多 COO曾熙 02年大学毕业 第一份工作二手房经纪人. 然后换到 上海新联洋销售代理公司,做新房销售.从业务员做到总经理.到江苏第一名. 从几十个人,变成了1000个人. 传 ...

  5. 帮优质粉丝脱单|【英国女】No.33|22岁,硕士,喜欢旅行爱好做饭,消费者心理学...

    点击蓝色"优质青年脱单前线"关注我哟 加个"星标",推荐优质单身青年 优质青年脱单前线是[菜鸟学Python]旗下的帮助粉丝脱单频道. 汇聚25万程序员群体,旨 ...

  6. 一位博士在华为的 22 年

    转自:心声社区 大家好, 今天给大家分享一位博士从大学毕业入职华为到今年退休的经历,他将自己22年的职业生涯都奉献给了华为,让我们一起学习他的感悟与经验,以下为原文. 转眼在我厂已经度过近22年,近日 ...

  7. 一个博士在华为的22年!

    上一篇:乐视成为反内卷之王?凡尔赛的官方回应火上热搜!网友羡慕哭了... 转自:心声社区 今天给大家分享一位博士从大学毕业入职华为到今年退休的经历,他将自己22年的职业生涯都奉献给了华为,让我们一起学 ...

  8. 一位博士在华为的22年

    大家好,我是张巧龙,今天分享一篇文章. -正文- 转眼在我厂已经度过近22年,近日跟部门领导和HR正式提出了退休申请.华为或将是我经历的唯一职场,趁着这段时间,回忆这段职业之路,对自己做个小结.未来将 ...

  9. 一位博士在华为的22年 | 职业生涯奋斗之路

    转眼在我厂已经度过近22年,近日跟部门领导和HR正式提出了退休申请.华为或将是我经历的唯一职场,趁着这段时间,回忆这段职业之路,对自己做个小结.未来将调整好身体.补充新知识.开启新生命历程. 01 回 ...

最新文章

  1. apache+tomcat 搭建负载均衡系统
  2. [CentOS7] systemd
  3. Tableau Desktop认证:为什么要关心以及如何通过
  4. 特斯拉:在行驶20万英里后 其电动汽车电池仍有90%容量
  5. Unity3D 学习教程 14 C# 旋转镜头
  6. 九大厂商联合推出「快应用」,围攻微信?
  7. sqlsever主库从库如何切换_面试最让你手足无措的一个问题:你的系统如何支撑高并发?...
  8. linux batch date,BatchDate官方版
  9. antd select show-search搜索时 拼音首字母匹配汉字模糊查询
  10. vlan间路由的三种方法
  11. Ubuntu 建立局域网
  12. 华盛顿大学华人团队进入微软Imagine Cup总决赛!
  13. Linux的关键字搜索
  14. 手机号 mysql 索引_mysql索引以及优化
  15. 【分享】Python的QQ群
  16. java界面的面板重绘
  17. [WARNING] No archetype found in remote catalog. Defaulting to internal catalog(已解决)
  18. 关于Neuro-Fuzzy Designer的使用
  19. 第7节 蒙卡模拟计算路径依赖型期权价格
  20. 在IPhone/IPad上建立反弹后门

热门文章

  1. Linux——目录和文件的管理(tar-head-tail-grep-gzip压缩解压缩等)
  2. 微信小程序 侧栏分类三:数据从后台查询
  3. php 出现Warning A non-numeric value encountered问题的原因及解决方法
  4. random函数概总
  5. tb交易开拓者常见问题集合
  6. MySQL知识盘点(增删改查)
  7. IDEA配置.gitignore
  8. Lucene架构学习
  9. 判断当前的日期是否是节假日、调休、补班、工作日、双休日
  10. 浙江中医药大学程序设计代表队2018年训练赛三十一