题目大意

选择k个祖先,将他们的人品指数(可能为负数)加起来。但必须要满足这个要求:如果除自己的父母之外的某个祖先被选了,那么他的下一代必需要选(不允许跳过某一代选择更远的祖先)。
求选择祖先的最优方案,使得他的人品值最大。

题目解析

很明显,是一个二叉树,每个节点最多存在两个父节点

由于必须满足不允许跳过某一代选择更远的祖先,所以这是一个树形DP

设 f[i][j] 表示到了编号为 i 的点,选了 j 个数的最大人品值。

设1号结点也算入一个有权值的点,则1号结点的值就是0。

设 表示以i号结点为根结点的子树的结点总数。那么:

我们可以得到如下转移方程:

ans=f[1][k+1]

代码

#include<bits/stdc++.h>
using namespace std;
int n,k;
int a[105],l[105],r[105],f[105][105];
int dfs(int lev,int num) //lev表示编号为lev的点 , num表示选了num个数的最大人品值。
{if(f[lev][num]!=0) return f[lev][num];if(num==0) return f[lev][num]=0;  //若没有点分给当前这个点,则为0 if(lev==0) return f[lev][num]=-1e8; //如果为0则不存在这个节点,返回一个较小的负数。if(num==1) return f[lev][num]=a[lev];//若只分了一个点,则只能为自己 int ans=-1e8;for(int i=0;i<num;i++){int t=a[lev]+dfs(l[lev],i)+dfs(r[lev],num-i-1);ans=max(ans,t);}f[lev][num]=ans;return ans;
}
int main()
{cin>>n>>k;for(int i=2;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)cin>>l[i]>>r[i];cout<<dfs(1,k+1); //根节点是1号,加上自己共有k+1个要选return 0;
}

[1.24] T3-人品问题相关推荐

  1. 2020.7.24 T3终章-剑之魂(jz暑假训练day9)

    Description [背景介绍] 古堡,暗鸦,斜阳,和深渊-- 等了三年,我独自一人,终于来到了这里-- "终焉的试炼吗?就在这里吗?"我自言自语道. "终焉的试炼啊 ...

  2. 【控制】二阶含时滞多智能体系统一致性仿真程序 离散化处理

    分享一个之前写的二阶的仿真模型 系统是二阶的 {p˙=vv˙=u\left\{\begin{aligned} \dot{p} = v \\ \dot{v} = u \\ \end{aligned}\r ...

  3. 多线程情况下创建连接池

    JAVA数据库连接池实现 博客分类: • 数据库连接池 JAVA数据库连接池连接池原理连接池实现JAVA连接池 连接池的管理用了了享元模式,这里对连接池进行简单设计. 一.设计思路 1.连接池配置属性 ...

  4. 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数

    高阶函数 将函数作为参数传入,这样的函数称为高阶函数.函数式编程就是指这种高度抽象的编程范式. 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函 ...

  5. JAVA题目 写一个收费站类_Java综合题目

    分支, 循环, 数据类型 1, 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 2, 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13... ...

  6. 毕业七年 摸爬滚打的心得体会

    1.一定要让今天的自己足够争气,不然,就对不起昨儿个曾经吃的苦. 2.智成天下事,天助有心人. 3.我以刘姥姥的模样进入社会这个"大观园"摸爬滚打,为的就是有朝一日能以王熙凤的姿态 ...

  7. [网络安全课程实验]:基于nmap 的网络扫描和信息分析

    实验:基于nmap 的网络扫描和信息分析 一.实验目的 1)熟悉TCP.UDP协议基础: 2)掌握nmap扫描原理,能够使用命令行与图形界面进行信息收集: 3)熟练使用nmap常用参数对不同网络环境进 ...

  8. ccf-csp 2016-2018部分题目总结

    目 录 2016-04 折点计数 俄罗斯方块 路径解析 游戏 网络连接 2016-09 最大波动 火车购票 炉石传说 交通规划 祭坛 2016-12 中间数 工资计算 权限查询 压缩编码 2017-0 ...

  9. C++使用AES+Base64算法对文本进行加密

    使用AES算法和Base64实现具体的文本加密. 采用AES算法的CBC模式,16位秘钥,PKCS7Padding填充方案对文本进行加解密.此方案可防止一些比较关键的文本暴露,也可以用于服务器通信间的 ...

  10. Python数据分析(matplotlib、numpy、pandas)

    Python数据分析 1.matplotlib 1.1 什么是matplotlib 能将数据进行可视化,更直观的呈现 使数据更加客观,更有说服力 matplotlib:最流行的Python底层绘图库, ...

最新文章

  1. outlook express 邮件超过2G时的解决方法
  2. Centos6.5_x86_64 编译安装Subversion-1.8.5
  3. 计算机一代的特点,计算机的特点_第一代计算机的特点
  4. boost::fusion::make_fused_procedure用法的测试程序
  5. java基础——equals及==的区别
  6. JVM垃圾回收,面试问到的都有了
  7. Uninstall JavaVM and Xcode On Mac OS X
  8. 《数学建模与数学实验》第5版 作图 习题2.6
  9. android studio翻译插件Translation使用。。
  10. 在兼容系统上升级DELL SATA硬盘的固件
  11. git 拉取最新代码覆盖本地
  12. 怎么旋转PDF页面方向?可以只旋转一页吗
  13. Java获取中文拼音、中文首字母缩写和中文首字母
  14. 抗衰老秘方盘点:枸杞子可养肝防衰老
  15. Java面试——多线程高并发
  16. 水晶报表 子报表 的应用
  17. 【智能优化算法-倭黑猩猩算法】基于倭黑猩猩优化算法求解多目标优化问题附matlab代码
  18. 浏览器兼容问题(实战干货)
  19. RFID电子标签有哪些分类
  20. 大小端模式的区别(即小尾和大尾的区别)

热门文章

  1. 关于renameTo的用法
  2. LINUX 字体装在哪个文件夹里
  3. 应用向左,理论向右,计算机2021的冰火两重天
  4. SM4加密算法原理和简单实现(java)
  5. Oracle物化视图与物化视图日志
  6. 农场主问题-鸡兔同笼问题---分析与解决--Python
  7. 《Kotin 极简教程》第9章 轻量级线程:协程(2)
  8. C#开发WPS插件入门
  9. 从零起步认识XAML
  10. 【日拱一卒行而不辍20221010】自制操作系统