顾名思义,就是在对树进行搜索的时候,由于限制了子节点选根节点必选和节点数限制,所以需要额外利用背包来维护最大值

假设根节点就是0,我们很容易 发现,这就是一个正常的树求和,但是限制了节点数量,所以需要用背包去规划这个限制(容量)

局部分析:取一个倒数2小的子节点,可以求出该节点下面选择0-n个子节点的最大值

        dp[x][i]:x代表该节点的序号,i代表这个节点占多大容量,dp[x][i]自然就是维护的最大值;将其上传,一直到【0】【m】的最大值

#include <bits/stdc++.h>
using namespace std;
int n,m;
struct ed{
    int next,to;
}e[1000];//ed结构体用于存储边信息,采用邻接表存储树结构。当然也可以用vector<vector<int>>

  • to:表示当前边的终点节点编号。在树的结构中,它指的是子节点的编号。
  • next:指向下一条从同一节点出发的边的索引。在邻接表中,它用于将同一个起点的所有边连接成一个链表。

int rt,h[1000],o,v[1000],dp[1000][1000];//h[1000]是邻接表的头数组,o是边计数器。v[1000]存储每个节点的权值。dp[u][t]表示以节点u为根的子树中选择t个节点能获得的最大权值。

void add(int x,int y){//邻接表添加边:将节点y添加为节点x的子节点。(用vector<vector<int>>就                                                       // 不用写这个惹。但是处理的效率会下降)

    e[++o].next=h[x];
    h[x]=o;
    e[o].to=y;
}

邻接表的工作原理

  1. 每个节点通过一个头指针(h 数组)指向第一条边
  2. 每条边e 数组中的元素)包含两个信息:
    • to:表示这条边指向的节点
    • next:指向下一条边的索引,形成链表


void dfs(int u,int t){
    if (t<=0) return ;
    for (int i=h[u]; i; i=e[i].next){//遍历
        int p = e[i].to;//到子节点i
        for (int k=0; k<t; ++k) 
            dp[p][k] = dp[u][k]+v[p];//在父节点 u 已经选择了 k 个节点的基础上,选择子节点 p(并获得其权值 v[p]
        dfs(p,t-1);
        for (int k=1; k<=t; ++k) 
            dp[u][k] = max(dp[u][k],dp[p][k-1]);
    }
}

动态规划核心函数:

  1. 终止条件:如果剩余选择次数t小于等于 0,直接返回。
  2. 初始化子节点 DP 值:对于每个子节点p,初始化dp[p][k]dp[u][k] + v[p],表示在父节点已选状态下选择子节点。
  3. 递归处理子树:递归调用dfs(p, t-1)处理子树,限制子树最多选择t-1个节点。
  4. 更新父节点 DP 值:通过子节点的 DP 值更新父节点的 DP 值,取最大值。


int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        int a;
        scanf("%d%d",&a,&v[i]);
        if(a)
          add(a,i);
        if(!a)add(0,i);
    }
    dfs(0,m);
    printf("%d",dp[0][m]);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86667.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86667.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/86667.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序安卓手机输入框文字飘出输入框

最近在开发微信小程序遇到一个问题&#xff0c;安卓手机输入框文字飘出输入框&#xff0c;但是ios系统的手机则正常。 使用情景&#xff1a;做了一个弹窗&#xff0c;弹窗内是表单&#xff0c;需要填写一些信息&#xff0c;但是在填写信息时光标不显示&#xff0c;输入的内容飘…

3 大语言模型预训练数据-3.2 数据处理-3.2.2 冗余去除——3.后缀数组(Suffix Array)在大模型数据去重中的原理与实战

后缀数组&#xff08;Suffix Array&#xff09;在大模型数据去重中的原理与实战 一、后缀数组的核心原理与数据结构二、后缀数组去重的核心流程1. **文档预处理与合并**2. **构建后缀数组**3. **计算最长公共前缀&#xff08;LCP&#xff09;数组**4. **基于LCP检测重复文档** …

数据库外连接详解:方式、差异与关键注意事项

&#x1f504; 数据库外连接详解&#xff1a;方式、差异与关键注意事项 外连接用于保留至少一个表的全部行&#xff0c;即使另一表无匹配记录。以下是三种外连接方式的深度解析&#xff1a; &#x1f50d; 一、外连接的三种类型 1. 左外连接 (LEFT OUTER JOIN) 作用&#xf…

vscode把less文件生成css文件配置,设置生成自定义文件名称和路径

1.下载less插件 在插件市场搜索 less 2.设置生成配置 3.修改out属性 "less.compile": {"compress": false, // 是否删除多余空白字符 一行显示[压缩]"sourceMap": false, // 是否创建文件目录树&#xff0c;true的话会自动生成一个 .css.map …

探索相机成像的奥秘 - 齐次坐标、径向失真和图像传感器倾斜

引言 大家好&#xff01;今天我们将一起探索相机成像背后的一些关键技术概念&#xff1a;齐次坐标、径向失真和图像传感器倾斜。这些概念对于理解相机如何捕捉和处理图像至关重要。我们将通过简单易懂的语言和严谨的公式来详细解释这些概念。 齐次坐标&#xff08;Homogeneou…

校企协同育人,智慧养老实训基地助力人才就业无忧

随着我国人口老龄化程度不断加深&#xff0c;智慧养老产业蓬勃发展&#xff0c;对专业人才的需求日益迫切。校企协同打造智慧养老实训基地&#xff0c;成为解决人才供需矛盾、提升人才培养质量的重要途径。通过科学的建设方案&#xff0c;智慧养老实训基地能够为学生提供实践平…

从需求到落地:一个AI训练平台的售前全流程复盘

目录 一、项目背景:客户要建自己的AI训练平台 二、需求梳理三板斧:并发量、存储带宽、模型种类 1. 并发训练量 2. 存储带宽需求 3. 模型类型与参数规模 三、解决方案设计:GPU选型 + 高速网络 + 存储架构 ✅ GPU服务器选型 ✅ 网络与通信架构 ✅ 存储与数据缓存 四…

织梦DedeCMS转WordPress

最近&#xff0c;有个用户找模板兔迁移网站&#xff0c;源站用的dede&#xff0c;需要转成wp&#xff0c;文章数量大概7000-8000篇&#xff0c;其中有个需求是保证旧文章的链接有效&#xff0c;在wp上的新文章与旧文章的链接类型不一样&#xff0c;所以这涉及到伪静态来处理跳转…

installGo.sh

#!/bin/bash # 检查是否以root用户运行 if [ "$(id -u)" -ne 0 ]; then echo "请使用root权限运行此脚本" exit 1 fi # 检查是否安装了必要的工具 for cmd in curl wget tar; do if ! command -v $cmd &> /dev/null; then echo…

【技术难题】el-table的全局数据排序实现示例,不受分页影响,以及异步请求带来的页面渲染问题

参考链接:https://blog.csdn.net/qq_35770559/article/details/131183121 问题代码 编辑页面detail.vue <el-form title="列表信息" name="detail"><el-form><el-form-item><el-buttontype="cyan"icon="el-icon-p…

非功能测试

非功能测试范畴&#xff1a;界面测试&#xff0c;易用性测试&#xff0c;兼容性测试&#xff0c;文档测试&#xff0c;安装/卸载测试等等 界面测试 1.窗体界面测试 1.窗体定义&#xff1a;指整个软件窗口&#xff0c;也可称为窗口&#xff0c;是界面测试的基本单位 2.控件分…

一起endpoint迷路的问题排查总结

今天上班&#xff0c;一到工位上&#xff0c;就有同事和我说有客户反映自己的容器的一些指标在监控平台不上报了&#xff0c;我当时一看机器所在的监控&#xff0c;发现确实是这样 确实存在某个点开始数据就没了&#xff0c;主要这个点当时也没有任何的操作变更&#xff0c;于…

官方 Linker Scripts 语法和规则解析(2)

系列文章目录 官方 Linker Scripts 语法和规则解析&#xff08;1&#xff09; 官方 Linker Scripts 语法和规则解析&#xff08;2&#xff09; 官方 Linker Scripts 语法和规则解析&#xff08;3&#xff09; 链接脚本(Linker Scripts)语法和规则解析(自官方手册) 7.9. 链接脚…

CentOS 7 通过YUM安装MySQL 8.0完整指南

一、准备工作&#xff1a;更新系统与YUM源 # 1. 更换阿里云镜像源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 2. 清理并重建缓存 yum clean all yum makecache# 3. 升级系统所有包 yum -y update 二、安装MySQL 8.0 1. 下载…

qq邮箱 新版 怎么去掉个性签名?

qq邮箱 新版 怎么去掉个性签名&#xff1f; 新版的qq邮箱&#xff0c;用着还不错&#xff0c;特别是搜索&#xff0c;比以前好多&#xff0c;以前加载的时候&#xff0c;搜索框里有一行字&#xff0c;加载不完&#xff0c;就没法搜索&#xff0c;特别菜。现在好多了。 不过现在…

C++:string类(1)

一.初步了解STL STL是Standard Template Library的缩写&#xff0c;中文译为标准模板库&#xff0c;是C标准库的重要组成部分。它本质上是一套基于模板的通用编程工具&#xff0c;通过模板技术实现了数据结构和算法的抽象与复用&#xff0c;让开发者无需重复编写基础功能&…

如何避免静态变量初始化中的异常

确保初始化表达式的安全性 基本数据类型初始化 对于基本数据类型&#xff08;如int、double、boolean等&#xff09;的静态变量初始化&#xff0c;要确保赋值的表达式是合法的。例如&#xff0c;在初始化一个int类型的静态变量时&#xff0c;避免出现除数为零的情况。 class Sa…

【151】基于Springboot+Vue实现的校园订餐管理系统小程序(有文档+PPT+视频)

系统介绍 视频演示 基于SpringbootVue实现的校园订餐管理系统小程序&#xff08;有文档PPT视频&#xff09; 基于SpringbootVue实现的校园订餐管理系统小程序采用前后端分离的架构方式&#xff0c;系统设计了管理员、商家、用户三种角色&#xff0c;系统分为管理端、小程序端&…

从 0 到 1:基于 Qwen3 Embedding 的 RAG 智能问答系统搭建指南

RAGFlow 是一个基于深度文档理解的开源 RAG&#xff08;检索增强生成&#xff09;引擎。 与 LLM 集成后&#xff0c;它能够提供真实的问答功能&#xff0c;并以来自各种复杂格式数据的可靠引用为支撑。 教程链接&#xff1a;OpenBayes 控制台 使用云平台:OpenBayes signup -…

Prompt Distillation for Efficient LLM-based Recommendation

题目 基于LLM的高效推荐的快速蒸馏 论文地址&#xff1a;https://dl.acm.org/doi/10.1145/3583780.3615017 摘要 大语言模型&#xff08;LLM&#xff09;在各种任务上表现出了无与伦比的建模能力&#xff0c;例如多步推理&#xff0c;但是这些模型的输入大部分仅限于纯文本&am…