【SDOI2017】苹果树

news/2025/1/8 0:04:13/文章来源:https://www.cnblogs.com/BYR-KKK/p/18656350

感觉出息了,从 2024 暑假开始接触这道题,今天才刚刚会。

link

题意

给出一棵树,每个节点上有 \(a_i\) 个苹果,价值为 \(v_i\),如果一个点取了苹果那么父亲也要取,设取了 \(t\) 个苹果,取苹果的最大深度为 \(h\),那么要求 \(t-h\le k\)\(k\) 给定),求最大价值。

弱化版问题

弱化版:\(t\le k\)

直接从子树层面进行背包的复杂度大概是 \(O(nk^2)\) 的。没有任何优化空间。如果我们能将一般背包的合并过程变得能用单调队列进行优化,那么复杂度很可能就是对的。考虑一种新的 dp 方式,按照 dfn 进行 dp,同时每次加入一个点时用单调队列优化多重背包。

我们将背包从子树层面搬到 dfn 层面,优化了复杂度。这是由于不需要支付子树合并的成本。考虑什么时候能做这样的变换,如果能通过一些手段使得子树内不需要承担过多的状态信息(该题利用下面的手段后子树不需要承担任何状态信息)即可。优化的复杂度只要来源于用技巧快速插入一个点来取代暴力的子树合并。如果没有这种技巧也很难做到复杂度的优化。

比如下面的问题:

每个点有价值 \(v_i\),限制 \(lim_i\),代表子树中选的点的数量不超过 \(lim_i\),求选择一些点的最大代价。

此时子树就需要承担选几个的信息,无法很好地优化复杂度。

回到这道题。令 \(f_{i,j}\) 代表考虑完所有 dfn \(\ge i\) 的点,选择 \(j\) 个苹果的最大价值。考虑 \(i\) 的子树内是否选苹果:

  • 不选,此时从 \(f_{i+siz_i,j}\) 进行转移。

  • 选,此时往 \(f_{i+1}\) 这个背包中插入 \(a_i-1\) 个价值为 \(v_i\) 个苹果后转移过来。

重点关注于后一种。对于 \(f_{i+1}\) 而言,\(i\) 的子树 \(p\) 必然是合法的(选择苹果的终点是子树的根),那么此时必须要选一个 \(v_i\) 的苹果,然后其余 \(a_i-1\) 个苹果可以任选,插入到背包即可。

设插完以后得到的新背包是 \(f'_{i+1}\),那么转移:\(f_{i,j}=\max(f_{i+siz_i,j},f'_{i+1,j-1}+v_i)\)。利用单调队列优化多重背包做到 \(O(nk)\)

原版问题

原版:\(t-h\le k\)

这个式子等价于可以选一条端点为根的链,链上面免费取一个苹果。

一个经典套路是,我们令一个点的所有子树按顺序排列(随便钦定一个顺序)。那么对于一个从根到某个点的链,会将整棵树劈成两部分,左边的部分按照 dfs 时结束访问的顺序是连续的一段前缀,右边的部分按照倒着 dfs 结束访问的顺序是一段连续的后缀。于是我们按照刚才的方法处理出前缀背包和后缀背包,及该条链上的背包,对三个背包进行合并可以做到 \(O(nk^2)\)

注意我们并不是将三个背包完全合并起来,而是只关注合并后第 \(k\) 个位置上的值(根据贪心不难证明),因此复杂度并非来源于做两次暴力的背包合并。

继续优化,考虑能否去掉“该条链上的背包”,显然是可以的。我们令当前点到根的路径上的每个点都只选了至多 \(a_i-1\) 个苹果即可。这样只需要 \(O(nk)\) 的时间复杂度完成背包合并。

单调队列优化多重背包

考虑一般的转移:\(f_{i,j}=\min(f_{i-1,j-kw}+kv)\),对于 \(r\in [0,w)\),记 \(g_r(i,p)=f(i,pw+r)\)

如果能求出来所有的 \(g_r(i,p)\),那么可以复原出 \(f_{i,j}\)

在求 \(g_r(i,p)\) 之前先考虑一下对于固定的 \(i\)\(g_r(i,p)\) 的状态数,显然为 \(w\times\lfloor\dfrac{W}{w}\rfloor=W\)\(W\) 为体积上限。

\(g_r(i,p)=\min\limits_{0\le k\le\min(c,p)}(f(i-1,pw+r-kw)+kv)\)

套路地,\(g_r(i,p)=\min\limits_{\max(p-c,0)\le k\le p}(f(i-1,kw+r)-kv)+pv\)

\(h_r(i,p)=g_r(i,p)-pv\)。则 \(g_r(i,p)=\min\limits_{\max(p-c,0)\le k\le p}(h_r(i-1,k))+pv\)

关键思想就是将无关项分离。

时间复杂度为 \(O(W)\)

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

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

相关文章

昆明理工大学计算机891考研复试真题

--昆工昆明理工大学计算机技术人工智能软件工程网络空间安全计算机系统结构计算机软件与理论计算机应用技术网络与信息安全408考研综合程序设计891计算机专业核心综合数据库系统原理

Window迷你网页服务器MyWebServer v3.8.195支持php

前言全局说明Window迷你网页服务器MyWebServer v3.8.195支持php一、说明 1.1 老版本说明、历史版本下载、php下载: https://www.cnblogs.com/wutou/p/18655971二、MyWebServer v3.8.195支持php 2.12.2免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负…

用 2025 年的工具,秒杀了 2022 年的题目。

你好呀,我是歪歪。 前几天打开知乎的时候,在付费咨询模块,我看到了一个差不多两年半前没有回答的技术问题。其实这个问题问的很清晰了,但是当时我拒绝了:虽然过去快两年半的时间,但是我记得还是比较清楚,当时拒绝的理由是如果让我来回答这个问题,我肯定是首选基于 Redi…

VS2022添加Qt窗口类(带.ui文件)

1、项目-属性-右键-添加-模块

基于自抗扰控制器和线性误差反馈控制律(ADRC-LSEF)的控制系统simulink建模与仿真

1.课题概述 基于自抗扰控制器和线性误差反馈控制律(ADRC-LSEF)的控制系统simulink建模与仿真。2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a 4.系统原理简介自抗扰控制器(Active Disturbance Rejection Controller, ADRC)结合线性误差反馈控制律(Linear Error Feedback…

MediaWIKI 1.43 教程系列 4 — MediaWIKI 安装后的基本配置

1. 更改logo 将自己的logo 导入到 Mediawiki 的安装目录,即 /var/www/mediawiki/里面的 /resources/assets 然后修改 LocalSettings.php 文件内容,更改如下$wgLogos = [1x => "$wgResourceBasePath/resources/assets/mediawiki.png",icon => "$wgReso…

在iStoreOS上配置frpc客户端

摘自:https://www.koolcenter.com/posts/224 安装frpc,直接在iStoreOS商店找到全部软件。输入名称点新增:填写ip地址以及端口:web 配置看图:

中考英语优秀范文-010 The Spring Festival 春节

1 写作要求 近年来我国的发展世人瞩目,中国的传统文化正越来越受到各国朋友的关注。请根据提示,以 “The Spring Festival” 为题写一篇短文,向外国朋友介绍我国的春节。 要求: 1、字迹工整,规范; 2、 80词左右。 2 优秀范文 The Spring Festival In China, the Spring f…

FANUC机器人M-410iB/700电机断轴维修方法

发那科(FANUC)作为电机领域的领袖品牌,其伺服电机广泛应用于各种工业设备中,特别是在机床、自动化控制、机器人等领域。然而,即使是如此高品质的伺服电机,也难免会出现FANUC工业机械手电机故障,其中断轴故障是比较常见的一种。 一、法兰克机械手电机断轴故障原因分析 1.…

第四章 保护模式入门

本文是对《操作系统真象还原》第四章学习的笔记,欢迎大家一起交流。第四章 保护模式入门 本文是对《操作系统真象还原》第四章学习的笔记,欢迎大家一起交流。 知识部分 为什么要有保护模式? 实模式下安全问题:实模式下操作系统和用户程序属于同一特权级,平起平坐,没有区别…

FMC子卡设计原理图:FMC228-四路1.2Gsps 16bit DA FMC子卡

FMC子卡 , 高性能异构计算卡 , 雷达图像处理 , 模拟信号采集板卡 , 模拟信号输入FMC228-四路1.2Gsps 16bit DA FMC子卡 一、板卡概述FMC228 板卡可实现宽波段、四通道、16位、1.2Gsps(600Msps直接射频综合)DAC功能,时钟可采用内部时钟源(可选择锁定到外部参考),或外部提供…

FMC子卡设计原理图:165-2路万兆光纤SFP+ FMC子卡模块

2路万兆光纤SFP+ FMC子卡模块1. 概述  该板卡是基于kc705和ml605的fmc 10g万兆光纤扩展板设计。  SFP+(10 Gigabit Small Form Factor Pluggable)是一种可热插拔的,独立于通信协议的光学收发器,通常传输光的波长是 850nm, 1310nm 或1550nm,用于10G bps的SONET/SDH,光…