首页 > 选课
头像 hnust_yangyanjun
发表于 2020-08-22 12:06:52
题意:你有n门课程,你可以选择m门课选修,有的课程有先修课,每一门课程都有学分,求你可获得的最大学分为多少? 思路:树状dp没先修课的与0节点连接,有先修课的与先修课连接,这样就是0节点为根的一棵树了。dp[i][j]表示以i节点为根的子树且选择了i时共选择j门课程的最大学分,这样就满足了先修课的条 展开全文
头像 shyyhs
发表于 2021-03-10 13:23:59
前言 清楚姐姐树形题单的最后一题了... 思路 考虑先当前节点必须把当前节点前面连接到根的节点全部选了..那么我们不妨令为选了节点且选取数量为的一个最大价值.那么转移似乎挺简单的. 代码 #include <bits/stdc++.h> using namespace std; cons 展开全文
头像 DearFrozencodechenback
发表于 2019-08-16 15:16:56
树形dp模板题首先建一个虚拟节点0,让原本的森林变成一颗树。然后我们设dp[i][j]表示以i为根的子树中,选j门课的最大价值。转移时我们枚举当前以x为根的子树选课的数量(t),以及分配给x的子节点y多少节课(j)。不难写出方程:dp[x][t]=max(dp[x][t],dp[x][t-j]+dp 展开全文
头像 codesonic
发表于 2019-09-02 22:09:53
考虑树形DP,这题其实是把背包搬到了树上,使得选一个物体需要经过他的前置物体才能选 那么我们只要在原有的树形DP上加一个背包即可 那么有方程,其中to是所有的儿子,第二维存的就是一维背包的东西 详细见代码... #include<bits/stdc++.h> using namespa 展开全文