【LuoGu】2014 选课——树上DP
[CTSC1997] 选课
题目描述
在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有 门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程 a 是课程 b 的先修课即只有学完了课程 a,才能学习课程 b)。一个学生要从这些课程里选择 门课程学习,问他能获得的最大学分是多少?
输入格式
第一行有两个整数 , 用空格隔开。( , )
接下来的 行,第 行包含两个整数 和 , 表示第I门课的直接先修课, 表示第I门课的学分。若 表示没有直接先修课( , )。
输出格式
只有一行,选 门课程的最大得分。
样例 #1
样例输入 #1
样例输出 #1
解决方案
树形DP
根据题意我们可以发现题目中给的图是一个森林,直接进行不太好处理。因此要使用一个技巧:超级结点。
超级结点就是新建一个结点将所有连通块连接在一起使森林连接成一棵树。然后从超级结点出发就可以遍历整棵树了。
建立超级结点后就可以来考虑动态规划了。
设表示在以为根结点的子树上选取个结点所能获得的最大分数。考虑结点,如果我们不从以为根结点的子树上选结点的话,那么,如果我们从以为根结点的子树上选择个子结点的话,就由两部分组成:从子树中选出的个结点,以及从的其他子树中选出来的个结点,状态转移方程为。因此总的状态转移方程为
题解参考:https://www.cnblogs.com/fusiwei/p/13753292.html
__EOF__

本文作者:天涯海角寻天涯
本文链接:https://www.cnblogs.com/yjx-7355608/p/17690107.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/yjx-7355608/p/17690107.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
分类:
算法刷题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话