当前位置: 首页 > article >正文

动态规划之【树形DP】第4课:树形DP应用案例实践3

动态规划之【树形DP】第4课树形DP应用案例实践3选课题目描述在大学里每个学生为了达到一定的学分必须从很多课程里选择一些课程来学习在课程里有些课程必须在某些课程之前学习如高等数学总是在其它课程之前学习。现在有N NN门功课每门课有若干学分分别记作s 1 , s 2 , ⋯ , s N s_1,s_2,\cdots,s_Ns1​,s2​,⋯,sN​每门课有一门或没有直接先修课若课程a aa是课程b bb的先修课即只有学完了课程a aa才能学习课程b bb。一个学生要从这些课程里选择M MM门课程学习问他能获得的最大学分是多少题目保证课程安排无冲突。即不会有a aa是b bb的先修课b bb也是a aa的先修课这类情况存在。输入格式第一行有两个整数N NNM MM用空格隔开( 1 ≤ N ≤ 300 (1 \leq N \leq 300(1≤N≤300,1 ≤ M ≤ 300 ) 1 \leq M \leq 300)1≤M≤300)。接下来的N NN行第i 1 i1i1行包含两个整数k i k_iki​和s i s_isi​k i k_iki​表示第i ii门课的直接先修课s i s_isi​表示第i ii门课的学分。若k i 0 k_i0ki​0表示没有直接先修课( 0 ≤ k i ≤ N (0 \leq {k_i} \leq N(0≤ki​≤N,1 ≤ s i ≤ 20 ) 1 \leq {s_i} \leq 20)1≤si​≤20)。数据保证至少存在一个k i 0 k_i0ki​0即至少一门课无先修课。输出格式只有一行选M MM门课程的最大学分。输入输出样例 1输入 17 4 2 2 0 1 0 4 2 1 7 1 7 6 2 2输出 113思路分析题目是典型的“树形依赖背包”问题。每门课可能有先修课构成一个森林。为了方便我们添加一个虚拟根节点0将每个无先修课的课程作为0的子节点从而将森林转化为一棵以0为根的树。核心思想定义dp[u][j]表示在以u为根的子树中必须选修课程u的前提下总共选修j门课程能获得的最大学分。对每个子节点v进行 DFS递归得到dp[v][*]。合并子节点时采用分组背包的方式当前节点u已经处理了部分子树现在要将子节点v的选课方案合并进来。外层循环倒序遍历当前已选课程数j从大到小避免重复使用同个子树。内层循环枚举在子节点v中选修k门课k1因为选了u之后才能选v且v必须选才能获得dp[v][k]。初始状态dp[u][1] w[u]即只选自己。处理虚拟根00不是实际课程不消耗选课名额因此对它的所有子节点直接做分组背包dp0[j]表示在整棵树中选j门课的最大学分。最终答案即为dp0[m]。复杂度O(N * M^2)但由于子树大小限制实际运行效率较高N、M ≤ 300 完全可过。代码实现#includebits/stdc.husingnamespacestd;constintN305;// 最大课程数intn,m;// n: 课程总数, m: 要选的课程数vectorintg[N];// 邻接表g[i] 存储课程 i 的直接后继子节点intw[N];// w[i] 课程 i 的学分intsz[N];// sz[i] 以 i 为根的子树大小包含 iintdp[N][N];// dp[u][j] 以 u 为根的子树中强制选 u 且共选 j 门课的最大学分// 深度优先搜索计算以 u 为根的子树u 必须选的 DP 值voiddfs(intu){sz[u]1;// 初始化子树大小为 1只有自己dp[u][1]w[u];// 只选 u 一门课学分就是 w[u]// 遍历每个子节点 vfor(intv:g[u]){dfs(v);// 先递归处理子节点得到 dp[v][*] 和 sz[v]// 合并子节点 v 到 u 的背包中// 倒序枚举当前已经选了的课程数 j从 sz[u] 到 1// 因为要防止在本次合并中重复使用 v 的贡献for(intjmin(sz[u],m);j1;--j){// 枚举从子节点 v 中选 k 门课k 至少为 1因为选了 u 才能选 v// 且总课程数不能超过 mfor(intk1;ksz[v]jkm;k){dp[u][jk]max(dp[u][jk],dp[u][j]dp[v][k]);}}sz[u]sz[v];// 更新子树大小所有子节点合并完后才是真实大小}}intmain(){ios::sync_with_stdio(false);cin.tie(0);cinnm;for(inti1;in;i){intk,s;cinks;w[i]s;g[k].push_back(i);// k0 表示无先修课作为虚拟根 0 的子节点}// 对虚拟根 0 的每个子节点分别进行 DFSfor(intv:g[0])dfs(v);// 处理虚拟根 00 本身不是实际课程不占用选课名额// dp0[j] 表示在 0 的子树中选 j 门课的最大学分intdp0[N]{0};intcur0;// 当前已经处理过的子树的课程总数上限for(intv:g[0]){// 分组背包合并倒序枚举当前已选课程数 jfor(intjmin(cur,m);j0;--j){// 枚举从子节点 v 中选 k 门课k1for(intk1;ksz[v]jkm;k){dp0[jk]max(dp0[jk],dp0[j]dp[v][k]);}}cursz[v];}coutdp0[m]\n;return0;}功能分析1. 输入处理第一行两个整数N和M分别表示课程总数和需要选修的门数。接下来N行每行两个整数k i k_iki​和s i s_isi​ $k_i $ 是先修课编号0 表示无先修课s i s_isi​是学分。2. 核心功能将课程依赖关系构建成以 0 为根的树。通过树形 DP 分组背包计算出在满足先修依赖的条件下恰好选M门课能获得的最大总学分。3. 输出一个整数表示最大学分。4. 算法复杂度时间O(N * M^2)最坏情况约 300×300×300 ≈ 2.7e7常数较小可 AC。空间O(N * M)约 300×300 的 DP 数组。5. 关键点虚拟根简化森林为树统一处理。强制选当前节点保证依赖关系正确。分组背包合并每个子节点是一个“物品组”在组内只能选一种选法即选 k 门课。子树大小优化限制循环上界避免无效状态。完整系列资料请查看专栏《csp信奥赛C动态规划》https://blog.csdn.net/weixin_66461496/category_13096895.html各种学习资料助力大家一站式学习和提升#includebits/stdc.husingnamespacestd;intmain(){cout########## 一站式掌握信奥赛知识! ##########;cout############# 冲刺信奥赛拿奖! #############;cout###### 课程购买后永久学习不受限制! ######;return0;}【秘籍汇总】完整csp信奥赛C学习资料1、csp/信奥赛C完整信奥赛系列课程永久学习https://edu.csdn.net/lecturer/7901 点击跳转2、CSP信奥赛C竞赛拿奖视频课https://edu.csdn.net/course/detail/40437 点击跳转https://edu.csdn.net/course/detail/41081 点击跳转3、csp信奥赛高频考点知识详解及案例实践CSP信奥赛C动态规划https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转CSP信奥赛C标准模板库STLhttps://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转信奥赛C提高组csp-s知识详解及案例实践https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转4、csp信奥赛冲刺一等奖有效刷题题解CSP信奥赛C初赛及复赛高频考点真题解析持续更新https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转信奥赛C提高组csp-s初赛复赛真题题解持续更新https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转5、GESP C考级真题题解GESP(C 一级二级三级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转GESP(C 四级五级六级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转GESP(C 七级八级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转· 文末祝福 ·#includebits/stdc.husingnamespacestd;intmain(){cout跟着王老师一起学习信奥赛C;cout 成就更好的自己 ;cout csp信奥赛一等奖属于你! ;return0;}

相关文章:

动态规划之【树形DP】第4课:树形DP应用案例实践3

动态规划之【树形DP】第4课:树形DP应用案例实践3 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学…...

基于AI+场景的数据安全管理平台建设方案:AI技术发展趋势与数据安全结合、AI+场景数据安全管理平台、AI+场景应用实践

该方案以AI技术为核心驱动力,围绕数据资产发现、事件分析、风险评估、策略处置等关键环节,构建了动态、智能的数据安全管理平台。通过自然语言处理、机器学习、深度学习、集成学习等技术,有效提升了敏感数据识别、异常行为检测、风险评估的准…...

10分钟快速上手:一站式AI变声神器RVC全平台部署终极指南

10分钟快速上手&#xff1a;一站式AI变声神器RVC全平台部署终极指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conve…...

[RKNN] 零拷贝接口:从原理到实践的性能优化指南

1. 为什么需要零拷贝接口 第一次接触RKNN零拷贝接口时&#xff0c;我正为一个智能摄像头项目焦头烂额。当时用通用接口跑YOLOv5模型&#xff0c;帧率始终卡在15FPS上不去。直到把代码改成零拷贝版本&#xff0c;帧率直接飙到28FPS——这个性能提升让我彻底理解了零拷贝的价值。…...

gte-base-zh模型服务治理:Xinference多租户隔离与资源配额控制实践

gte-base-zh模型服务治理&#xff1a;Xinference多租户隔离与资源配额控制实践 1. 项目背景与需求场景 在实际的企业级AI应用部署中&#xff0c;我们经常面临这样的挑战&#xff1a;多个团队或项目需要共享同一个模型服务&#xff0c;但各自有不同的资源需求和隔离要求。传统…...

终极指南:RePKG - Wallpaper Engine资源提取与纹理转换的完整解决方案

终极指南&#xff1a;RePKG - Wallpaper Engine资源提取与纹理转换的完整解决方案 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg RePKG是一款专为Wallpaper Engine设计的开源命令行…...

不止写文章!用Gutenberg区块编辑器5分钟打造高转化落地页(实战案例)

用Gutenberg区块编辑器5分钟打造高转化落地页&#xff08;实战指南&#xff09; 在数字营销领域&#xff0c;落地页的转化率直接影响业务成败。传统建站工具要么过于复杂&#xff08;如Elementor、Divi&#xff09;&#xff0c;要么功能受限&#xff08;如经典编辑器&#xff0…...

Vision Master 视觉软件应用-字符识别

我们读取如上字符串&#xff0c;需要的算子如下【字符识别算子】图像源--高精度匹配--位置修正--字符识别--格式化【操作】【高精度匹配】基本参数特征模板【位置修正】---点击执行---创建基准---点击执行【字符串识别】***基本参数***选择绘制---选择搜索范围****运行参数***【…...

3分钟极速上手:网盘下载加速神器全功能使用指南

3分钟极速上手&#xff1a;网盘下载加速神器全功能使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...

如何用ViGEmBus在Windows上实现专业级游戏控制:3个简单步骤解锁无限可能

如何用ViGEmBus在Windows上实现专业级游戏控制&#xff1a;3个简单步骤解锁无限可能 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 想要在Windows系统上获得…...

如何用10分钟语音打造专业AI变声器:RVC语音转换终极指南

如何用10分钟语音打造专业AI变声器&#xff1a;RVC语音转换终极指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conve…...

FaceFusion使用指南:如何配置局域网访问实现多端协同?

FaceFusion使用指南&#xff1a;如何配置局域网访问实现多端协同&#xff1f; 1. 为什么需要局域网访问&#xff1f; FaceFusion作为一款强大的AI换脸工具&#xff0c;默认情况下只能在安装它的本地电脑上使用。但在实际工作中&#xff0c;我们经常遇到这些场景&#xff1a; …...

PPIO上线GLM-5.1:面向8小时级长程任务的开源SOTA模型

今天&#xff0c;PPIO 上线 GLM-5.1。GLM-5.1 是智谱新一代的旗舰级智能体工程模型&#xff0c;其编码能力比上一代产品显著增强。GLM-5.1 在 SWE-Bench Pro 测试中取得了最先进的性能&#xff0c;并在 NL2Repo&#xff08;代码库生成&#xff09;和 Terminal-Bench 2.0&#x…...

知识库 / Agent 项目上线后,Token 成本为什么会慢慢失控?

很多团队做知识库或 Agent 项目时&#xff0c;前期体验往往都不错。因为在 Demo 阶段&#xff0c;通常是&#xff1a;- 少量文档 - 少量用户 - 相对标准的问题 - 较短的调用链路这时系统看起来很顺&#xff0c;成本也不高。但项目一旦上线&#xff0c;很多团队会慢慢发现&#…...

MySQL分区实战指南:从原理到落地的完整攻略

作为一名长期深耕后端开发的工程师&#xff0c;相信很多同学都遇到过这样的痛点&#xff1a;随着业务增长&#xff0c;单表数据量突破千万甚至亿级后&#xff0c;即使加了索引&#xff0c;查询依然卡顿&#xff1b;定期清理历史数据时&#xff0c;delete 语句执行几小时还会导致…...

3大核心功能解析:ArchivePasswordTestTool高效恢复加密压缩包密码

3大核心功能解析&#xff1a;ArchivePasswordTestTool高效恢复加密压缩包密码 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool ArchivePassw…...

多线程--第一次小结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、线程和进程的区别和共同点二、创建线程1.继承Thread,重写run方法2.实现Runnable接口,重写run3.继承Thread,重写run,使用匿名内部类4.使用匿名内部类,基于Runnabl…...

强化学习(7)--时序差分方法

说明&#xff1a;本系列文章是我在学习了西湖大学赵世钰老师的《Mathematical Foundations of Reinforcement Learning》一书后的学习笔记&#xff0c;在B站上有赵老师的完整课程视频。 课程视频链接 PDF教材链接 本文代码链接 一、TD算法的基本形式&#xff08;TD0&#xf…...

技术解析 | TSMaster—CCP/XCP标定功能在汽车电子开发中的实战应用

1. 汽车电子开发中的标定技术基础 在汽车电子系统开发过程中&#xff0c;标定&#xff08;Calibration&#xff09;是一个至关重要的环节。简单来说&#xff0c;标定就是通过调整ECU&#xff08;电子控制单元&#xff09;中的参数&#xff0c;使车辆性能达到最优状态的过程。想…...

终极Windows Defender移除指南:如何彻底关闭13项核心安全服务

终极Windows Defender移除指南&#xff1a;如何彻底关闭13项核心安全服务 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirr…...

RWKV7-1.5B-G1A模型网络通信优化与协议设计

RWKV7-1.5B-G1A模型网络通信优化与协议设计 1. 为什么需要网络层优化 大模型服务在实际部署中&#xff0c;网络通信往往成为性能瓶颈。我们测试发现&#xff0c;RWKV7-1.5B-G1A模型在本地推理时平均响应时间为120ms&#xff0c;但通过网络API调用时延迟飙升至450ms以上。这种…...

深入MiniCPM-o-4.5-nvidia-FlagOS:理解大模型背后的计算机组成原理

深入MiniCPM-o-4.5-nvidia-FlagOS&#xff1a;理解大模型背后的计算机组成原理 你是不是也好奇&#xff0c;像MiniCPM-o-4.5这样的大模型&#xff0c;为什么能在NVIDIA的GPU上跑得飞快&#xff1f;为什么换个显卡&#xff0c;生成速度就能天差地别&#xff1f;这背后&#xff…...

终极指南:zenodo_get深度解析与高效科研数据下载实战

终极指南&#xff1a;zenodo_get深度解析与高效科研数据下载实战 【免费下载链接】zenodo_get Zenodo_get: Downloader for Zenodo records 项目地址: https://gitcode.com/gh_mirrors/ze/zenodo_get 在科研数据管理领域&#xff0c;zenodo_get作为专业的Zenodo记录下载…...

EldenRingSaveCopier终极教程:轻松实现艾尔登法环存档安全迁移

EldenRingSaveCopier终极教程&#xff1a;轻松实现艾尔登法环存档安全迁移 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 还在为《艾尔登法环》存档丢失而烦恼吗&#xff1f;这款开源工具EldenRingSaveCopie…...

终极WeMod增强器完整指南:零成本解锁专业版特权功能

终极WeMod增强器完整指南&#xff1a;零成本解锁专业版特权功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的高昂订阅费而烦恼吗…...

83个高效Tracker服务器:让你的BT下载速度飙升300%的终极秘籍

83个高效Tracker服务器&#xff1a;让你的BT下载速度飙升300%的终极秘籍 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 还在为BT下载速度慢如蜗牛而烦恼吗&#xff1f;每次…...

高性能B站视频下载工具架构设计:哔哩下载姬downkyi技术深度解析

高性能B站视频下载工具架构设计&#xff1a;哔哩下载姬downkyi技术深度解析 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印…...

GLM-4-9B-Chat-1M部署全攻略:vLLM加速+Chainlit界面,新手友好教程

GLM-4-9B-Chat-1M部署全攻略&#xff1a;vLLM加速Chainlit界面&#xff0c;新手友好教程 1. 为什么选择GLM-4-9B-Chat-1M GLM-4-9B-Chat-1M是智谱AI推出的新一代开源大模型&#xff0c;在多项基准测试中表现出色。这个版本特别针对长文本对话场景优化&#xff0c;支持高达1M&…...

系统高速下载工具

链接&#xff1a;https://pan.quark.cn/s/ae5af7fb722e系统高速下载工具是一款专为 Windows 系统设计的纯净镜像高速下载工具&#xff0c;单文件绿色运行、无冗余写入&#xff0c;可直连微软官方服务器获取 Win10/Win11 全版本原版系统。一款简单、易用的系统映像高速下载工具 …...

React 实现 AI 流式打字机对话:SSE 分包粘包处理 + 并发优化

核心功能说明 完全对标豆包官网&#xff0c;涵盖所有生产级必备功能&#xff0c;无任何冗余逻辑&#xff1a; SSE 标准流式解析&#xff1a;兼容所有主流大模型&#xff08;豆包、通义千问、ChatGPT&#xff09;&#xff0c;严格处理 TCP 分包/粘包&#xff0c;不丢字、不乱码。…...