【洛谷_P2015】二叉苹果树

洛谷 P2015 二叉苹果树 题解 二叉苹果树 题解 洛谷 P2015 题目 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有NNN个结点(叶子点或者树枝分叉点),编号为1-NNN,树根编号一定是1。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树 现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。 给定需要保留的树枝数量,求出最多能留住多少苹果。 输入 第1行2个数,NNN和QQQ(1<=QQQ<= NNN,1<NNN<=100)。 阅读详情

二叉苹果树


题目描述

有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点)
这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。
我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树

2   5
 \ / 
  3   4
   \ /
    1

现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。
给定需要保留的树枝数量,求出最多能留住多少苹果。

输入格式

第1行2个数,N和Q(1<=Q<= N,1<N<=100)。
N表示树的结点数,Q表示要保留的树枝数量。接下来N-1行描述树枝的信息。
每行3个整数,前两个是它连接的结点的编号。第3个数是这根树枝上苹果的数量。
每根树枝上的苹果不超过30000个。

输出格式

一个数,最多能留住的苹果的数量。

输入输出样例

#输出 #1## 输入 #1

5 2
1 3 1
1 4 10
2 3 20
3 5 20

输出 #1

21

解题思路

很明显,这是一道DP,我们用F[now][i]表示以第now(我们使用DFS进行DP)个点为根的子树选择i个点(我们事先把边转换成点)的最大值,动态转移方程为:
f[now][k]=max(f[now][k],f[tree[now][1]][i]+f[tree[now][2]][k−i−1]+num[now]);f[now][k]=max(f[now][k],f[tree[now][1]][i]+f[tree[now][2]][k-i-1]+num[now]);f[now][k]=max(f[now][k],f[tree[now][1]][i]+f[tree[now][2]][k−i−1]+num[now]);
我们外面套一层DFS,那么时间复杂度为O(n2)。代码如下:

#include<iostream>
#include<cstdio>
using namespace std;

int n,q,a[110][110];
int tree[110][3],num[110],f[110][110];

void build(int now)
{
	int lr=0;
	for(int i=0;i<=n;i++)
		if(a[now][i]>=0)
		{
			lr++;
			tree[now][lr]=i;
			num[i]=a[now][i];
			a[now][i]=a[i][now]=-1;
			build(i);
			if(lr==2)
				return;
		}
}

void dfs(int now,int k)
{
	if(k==0)
		f[now][k]=0;
	else if(tree[now][1]==0&&tree[now][2]==0)
		f[now][k]=num[now];
	else
	{
		f[now][k]=0;
		for(int i=0;i<k;i++)
		{
			if(f[tree[now][1]][i]==0)
				dfs(tree[now][1],i);
			if(f[tree[now][2]][k-i-1]==0)
				dfs(tree[now][2],k-i-1);
			f[now][k]=max(f[now][k],f[tree[now][1]][i]+f[tree[now][2]][k-i-1]+num[now]);
		}
	}
}

int main()
{
	cin>>n>>q;
	for(int i=0;i<=n;i++)	
		for(int j=0;j<=n;j++)
			a[i][j]=a[j][i]=-1;
	for(int i=1;i<n;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		a[x][y]=z;
		a[y][x]=z;
	}
	build(1);
	dfs(1,q+1);
	cout<<f[1][q+1]<<endl;
	return 0;
}

题解:洛谷 P2015 二叉苹果树 题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点)我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。现在这颗树枝条太多了,需要剪枝。给定需要保留的树枝数量,求出最多能留住多少苹果。,分别表示表示树的结点数,和要保留的树枝数量。个整数,描述一根树枝的信息:前。个数是它连接的结点的编号,第。一个数,最多能留住的苹果的数量。个数是这根树枝上苹果的数量。#普及+# #树上背包# 阅读详情

相关推荐

深入解析DMR协议中的4-CPFSK调制技术与实现

本文深入解析了DMR协议中采用的4-CPFSK调制技术。该技术凭借其连续相位、恒包络的特性,在有限的12.5kHz信道带宽内实现了稳健的通信,有效对抗干扰并提升功放效率,是DMR数字对讲机清晰、稳定通信的核心保障。文章详细阐述了其原理、实现细节及在协议栈中的协同作用。

weixin_29306875的博客 229

二叉苹果树

二叉苹果树https://www.luogu.org/problemnew/show/P2015 题目描述 有一棵苹果树,如果树枝有分叉,一定是分\(2\)叉(就是说没有只有\(1\)个儿子的结点) 这棵树共有\(N\)个结点(叶子点或者树枝分叉点),编号为\(1-N\),树根编号一定是\(1\)。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。 现在这颗树枝条太多了,需要剪枝...

277

Windows 11 RDP Wrapper 配置教程与常见问题解决方法

解锁家庭版RDP主机功能(Windows 11家庭版原生不支持作为RDP服务器)突破单用户连接限制,实现多用户同时远程登录(类似服务器版功能)它不修改系统核心文件,通过注入方式工作,相对安全可靠。RDP Wrapper是Windows 11家庭版用户启用远程桌面、突破单用户限制的高效工具。遵循本文步骤可快速完成配置,遇到问题时按常见问题排查方案逐一解决,多数问题可通过更新配置文件或重启服务解决。若长期使用,建议关注官方GitHub仓库的更新,确保兼容性和安全性。

weixin_41521681的博客 1362

二叉苹果树(树上背包dp)

题目: 思路分析: 树根已经确定为1 然后son数组为该节点有几个子节点 f[u][j] //表示以u节点为根的树,保留j个节点后可以保留的最大苹果数 状态f[u][j],可以由f[u][j-k]+f[v][k]+a[u][v]转移过来。 因此状态转移方程为:f[u][j]=max(f[u][j],f[u][j-k]+f[v][k]+a[u][v]);1)f[][]数组一开始要初始化为负无穷。这么初始化是为了保证子节点只能由其父节点转移而来。最后的结果为f[1][q+1]。因为f[u][j]

m0_57006708的博客 2470

保姆级教程:在ROS Noetic下,手把手教你将自定义A*全局规划器打包成插件(附避坑指南)

本文提供了一份详细的ROS Noetic下自定义A*全局规划器插件开发指南,涵盖从环境准备、算法优化到插件配置与调试的全流程。通过实战案例和避坑技巧,帮助开发者高效实现机器人导航中的全局路径规划,特别适合需要优化ROS导航栈的开发者。

weixin_29168675的博客 285

【推荐100个unity插件】Unity URP(通用渲染管线)的基于物理的天地和预计算大气散射——UnityPhysicallyBasedSkyURP

本文介绍了Unity URP(通用渲染管线)中基于物理的天地和预计算大气散射的实现方法。该插件提供物理天空、大气散射、高度雾效、动态天空反射和环境光等功能,要求Unity 2022.3及以上版本,支持着色器模型3.5+。使用步骤包括:添加渲染器功能、配置Volume组件(天空、雾效等),并建议太阳强度设为3、曝光为0作为初始设置。插件已在GitHub和Gitee开源,附带详细配置截图和效果展示。文末推荐了多个Unity开发相关专栏,涵盖游戏开发全领域知识。作者向宇提供了博客链接,欢迎交流学习问题。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1226

1074 二叉苹果树(树形dp)

1. 问题描述: 有一棵二叉苹果树,如果树枝有分叉,一定是分两叉,即没有只有一个儿子的节点。这棵树共 N 个节点,编号为 1 至 N,树根编号一定为 1。我们用一根树枝两端连接的节点编号描述一根树枝的位置。一棵苹果树的树枝太多了,需要剪枝。但是一些树枝上长有苹果,给定需要保留的树枝数量,求最多能留住多少苹果。这里的保留是指最终与1号点连通。 输入格式 第一行包含两个整数 N 和 Q,分别表示树的节点数以及要保留的树枝数量。接下来 N−1 行描述树枝信息,每行三个整数,前两个是它连接的节点的编号,第三个

二哈 988

VS2022编译xlnt库

xlnt是一个用于读写Excel文件的C++库,本文介绍如何用源代码编译静态或动态xlnt库

QQVQQ的博客 7288

[树形dp] 二叉苹果树

有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点)。这棵树共有N个结点(叶子点或者树枝分叉点),编号为1∼N,树根编号一定是1。我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树。现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。给定需要保留的树枝数量,求出最多能留住多少苹果。

m0_64542522的博客 854

【华为OD机试真题】4、字符统计及重排 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数, 并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。 如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前

KJ.JK 3289

利用 SAP Joule 提升 ABAP 开发效率的前提条件与限制全解析

综上,想要在 ABAP Development Tools 中顺利使用 SAP Joule,既要准备好 BTP、IAS、ABAP 系统与 ADT 的版本与信任链,也要理解许可证、配额、语法范围等限制。只有在这些前提全部满足后,Joule 才能真正发挥生成式 AI 的价值,帮助 ABAP 开发者从繁琐模板中解放出来,把注意力投入在业务创新与 Clean Core 改造之上。未来 SAP 还将扩展中文语境、自动修复建议以及跨系统智能代理等功能,值得持续关注。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 663

洛谷2015 二叉苹果树 树形DP

https://www.luogu.org/problemnew/show/P2015 二叉苹果树 时间限制: 1 Sec  内存限制: 128 MB 题目描述 有一棵苹果树,如果树枝有分叉,一定是分 2 叉(就是说没有只有 1 个儿子的结点) 这棵树共有 N 个结点(叶子点或者树枝分叉点),编号为 1 - N 树根编号一定是 1。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位...

紫芝的博客 847

CANoe/CAPL ,远程邮件通知

CANoe/CAPL ,远程邮件通知

蚂蚁小兵 3036

洛谷 P2015 二叉苹果树

洛谷 P2015 二叉苹果树 题目: 有图。转链接 题解: 树形dp。 任然是有依赖的树上背包。 树上背包思路可以转这篇,值得注意的是,题目中输入的是保留的边数,那么我们要将其转换成点数 = 边数 + 1 #include <iostream> #include <cstdio> #define N 105 using namespace std; st...

aochongbi5356的博客 187

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

洛谷P2015 二叉苹果树

状态转移方程:f [ i ][ j ]=max( f[ i ][ j ],f[ v ][ k ]+f[ i ][ j-k-1 ]+w[ i->v ])接下来 𝑁−1 行,每行 3 个整数,描述一根树枝的信息:前 2 个数是它连接的结点的编号,第 3 个数是这根树枝上苹果的数量。我们在深搜的时候自动枚举了物品,我们不知道 i 的子节点 v 选了几条边,我们就再用一个循环枚举子节点选了 k 条边。第一行 22 个整数 𝑁 和 𝑄,分别表示表示树的结点数,和要保留的树枝数量。一个数,最多能留住的苹果的数量。

yjfyjfyjf54188的博客 293

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

(树形背包)洛谷P2015 二叉苹果树

洛谷P2015 二叉苹果树 思路: 树形背包的模板题,非常简单,一点都搞不懂,看了大佬的代码和题解才勉强理解一点点。 用链式前向星存边,因为这是无向图,所以要存两次边,所以在dfs的时候要判断一下他链接的结点是不是自己的父节点。 用dp[i][j]表示第i个结点有j个树枝时能保留苹果的最大值。根据题目,很显然我们要求dp[1][q]。 我们可得状态转移方程为:dp[u][i]=max(dp[u][...

Z7784562的博客 298

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

洛谷 P2015 二叉苹果树 (树上背包)

洛谷 P2015 二叉苹果树 (树上背包) 一道树形DP,本来因为是二叉,其实不需要用树上背包来干(其实即使是多叉也可以多叉转二叉),但是最近都刷树上背包的题,所以用了树上背包。 首先,定义状态\(dp[x][i]\)表示在节点\(x\)保留\(i\)个边所获得的最大苹果数,定义状态时一定要选对状态并且定义清晰(状态中包括了当前节点吗?目标状态是怎样的?)。一开始我就是因为状态定义错误,所以卡了半...

weixin_30664539的博客 196

洛谷P2015 二叉苹果树【树形dp】

P2015 二叉苹果树 时间限制 1.00s 内存限制 125.00MB 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树 2 5 \ / 3 4 \ / 1 现在这颗树枝条太多了,需要剪...

C++的星空 462

洛谷P2015 二叉苹果树(树状动归)

题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树 2 5 \ / 3 4 \ / 1 现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。 给定需要保留的树枝数量,求出最

jqhsdtz 1万+

洛谷 P2015 二叉苹果树-普及+/提高

有一棵苹果树,如果树枝有分叉,一定是分二叉(就是说没有只有一个儿子的结点)我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。给定需要保留的树枝数量,求出最多能留住多少苹果。,分别表示表示树的结点数,和要保留的树枝数量。个结点(叶子点或者树枝分叉点),编号为。个整数,描述一根树枝的信息:前。个数是它连接的结点的编号,第。一个数,最多能留住的苹果的数量。个数是这根树枝上苹果的数量。

weixin_37253733的博客 489

信息学奥赛一本通 1575:【例 1】二叉苹果树 | 洛谷 P2015 二叉苹果树

本文介绍了两种解决二叉苹果树问题的树形动态规划方法。第一种方法通过建立二叉树,定义状态dp[u][j]表示以结点u为根的子树保留j条边能获得的最大边权和,状态转移考虑左右子树的分配情况。第二种方法采用有依赖的背包思想,通过滚动数组优化空间复杂度。两种方法的时间复杂度均为O(nq^2),适用于解决树形结构上的最优解问题。代码实现中,第一种方法更直观,第二种方法更具通用性,能扩展到多叉树情况。最终结果通过从根节点出发进行动态规划求解。

君义NOIP的博客 838

洛谷 P2015:二叉苹果树 ← 有依赖的背包问题

f[u][j]=max(f[u][j],f[u][j-i-1]+f[v][i]+w) 中,j-i-1 表示留给自己其他子树的树枝。-1 表示必须保留 u->v 这一条树枝。

hnjzsyjyj的专栏 330

洛谷P2015 二叉苹果树 (树形dp)

链接: 洛谷2015 二叉苹果树 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树 2 5 \ / 3 4 \ / 1 现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹...

October の 补题记录 378

洛谷—P2015(二叉苹果树)

题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1。 我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有4个树枝的树 2 5 \ / 3 4 \ / 1 现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。 给定需要保留的...

菜鸡的博客 454
上一篇: 【洛谷_P1040】加分二叉树
下一篇: 【洛谷_P2014】选课
SSL_GYX
博客等级 码龄7年 103粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值