[1.24] T3-人品问题
题目大意
选择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-人品问题相关推荐
- 2020.7.24 T3终章-剑之魂(jz暑假训练day9)
Description [背景介绍] 古堡,暗鸦,斜阳,和深渊-- 等了三年,我独自一人,终于来到了这里-- "终焉的试炼吗?就在这里吗?"我自言自语道. "终焉的试炼啊 ...
- 【控制】二阶含时滞多智能体系统一致性仿真程序 离散化处理
分享一个之前写的二阶的仿真模型 系统是二阶的 {p˙=vv˙=u\left\{\begin{aligned} \dot{p} = v \\ \dot{v} = u \\ \end{aligned}\r ...
- 多线程情况下创建连接池
JAVA数据库连接池实现 博客分类: • 数据库连接池 JAVA数据库连接池连接池原理连接池实现JAVA连接池 连接池的管理用了了享元模式,这里对连接池进行简单设计. 一.设计思路 1.连接池配置属性 ...
- 廖雪峰讲python高阶函数求导公式_一文读懂Python 高阶函数
高阶函数 将函数作为参数传入,这样的函数称为高阶函数.函数式编程就是指这种高度抽象的编程范式. 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函 ...
- JAVA题目 写一个收费站类_Java综合题目
分支, 循环, 数据类型 1, 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 2, 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13... ...
- 毕业七年 摸爬滚打的心得体会
1.一定要让今天的自己足够争气,不然,就对不起昨儿个曾经吃的苦. 2.智成天下事,天助有心人. 3.我以刘姥姥的模样进入社会这个"大观园"摸爬滚打,为的就是有朝一日能以王熙凤的姿态 ...
- [网络安全课程实验]:基于nmap 的网络扫描和信息分析
实验:基于nmap 的网络扫描和信息分析 一.实验目的 1)熟悉TCP.UDP协议基础: 2)掌握nmap扫描原理,能够使用命令行与图形界面进行信息收集: 3)熟练使用nmap常用参数对不同网络环境进 ...
- ccf-csp 2016-2018部分题目总结
目 录 2016-04 折点计数 俄罗斯方块 路径解析 游戏 网络连接 2016-09 最大波动 火车购票 炉石传说 交通规划 祭坛 2016-12 中间数 工资计算 权限查询 压缩编码 2017-0 ...
- C++使用AES+Base64算法对文本进行加密
使用AES算法和Base64实现具体的文本加密. 采用AES算法的CBC模式,16位秘钥,PKCS7Padding填充方案对文本进行加解密.此方案可防止一些比较关键的文本暴露,也可以用于服务器通信间的 ...
- Python数据分析(matplotlib、numpy、pandas)
Python数据分析 1.matplotlib 1.1 什么是matplotlib 能将数据进行可视化,更直观的呈现 使数据更加客观,更有说服力 matplotlib:最流行的Python底层绘图库, ...
最新文章
- outlook express 邮件超过2G时的解决方法
- Centos6.5_x86_64 编译安装Subversion-1.8.5
- 计算机一代的特点,计算机的特点_第一代计算机的特点
- boost::fusion::make_fused_procedure用法的测试程序
- java基础——equals及==的区别
- JVM垃圾回收,面试问到的都有了
- Uninstall JavaVM and Xcode On Mac OS X
- 《数学建模与数学实验》第5版 作图 习题2.6
- android studio翻译插件Translation使用。。
- 在兼容系统上升级DELL SATA硬盘的固件
- git 拉取最新代码覆盖本地
- 怎么旋转PDF页面方向?可以只旋转一页吗
- Java获取中文拼音、中文首字母缩写和中文首字母
- 抗衰老秘方盘点:枸杞子可养肝防衰老
- Java面试——多线程高并发
- 水晶报表 子报表 的应用
- 【智能优化算法-倭黑猩猩算法】基于倭黑猩猩优化算法求解多目标优化问题附matlab代码
- 浏览器兼容问题(实战干货)
- RFID电子标签有哪些分类
- 大小端模式的区别(即小尾和大尾的区别)