题目链接

1 有前驱
2 有权值
可以联想到 是个森林结构
0代表空 如果把0看成根节点的话 就成了一个树
我们可以增加一个课容量 然后把0加入选课 就避免了森林结构

用前向星存图 把每个节点的子节点存起来

从0节点开始访问 dp[u][j] u->代表根节点 j->代表以u为起点选j个最大分数

然后进行动态规划

for(int i=head[u];i;i=e[i].next)//访问每一个叶子结点for(int j=m,v=e[i].to;j>0;j--) //规划选课容量for(int k=0;k<j;k++)  //从叶子结点里选k个与原来的j-k个结合 与dp[u][j]比较dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]);

在这上面加一个

 for(int i=head[u];i;i=e[i].next) solve(e[i].to);先访问叶子结点

然后总的代码如下

#include<bits/stdc++.h>using namespace std;
map<int,int>mp;
const int maxn=305;
//bool number[maxn + 5];
int n,m;struct node{int next,to;
}e[maxn];
int cnt;
int dp[maxn][maxn];
int head[10000];
void add(int u,int v){e[++cnt]={head[u],v};head[u]=cnt;
}
void solve(int u){//cout<<u<<endl;for(int i=head[u];i;i=e[i].next) solve(e[i].to);for(int i=head[u];i;i=e[i].next)for(int j=m,v=e[i].to;j>0;j--)for(int k=0;k<j;k++) dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k]);
}
int main(){cin>>n>>m; ++m;for(int i=1;i<=n;++i){int p; cin>>p>>dp[i][1];add(p,i);}solve(0);cout<<dp[0][m];return 0;
}
 **G寄**

P2014 [CTSC1997] 选课(树形dp)相关推荐

  1. 【每日DP】day 8、P2014 [CTSC1997]选课(树形DP(树形背包)模板)难度⭐⭐⭐

    P2014 [CTSC1997]选课 题意为选一门课前要看它是否有前提条件:即选了一门主课才能选 "副科",所以可以树形背包来做. 注意是不能用分组背包来做,因为这道题附件有很多个 ...

  2. [Luogu P2014]选课 (树形DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P2014 Solution 这是一道十分经典的树形DP题,这种类型的树形DP有一种很普遍的解法. 首先,观察 ...

  3. 0x54. 动态规划 - 树形DP(习题详解 × 12)

    目录 0x54.1 树形DP Problem A. 没有上司的舞会 Problem B. 战略游戏 0x54.2 树上背包 Problem A. 选课 Problem B.[数据加强版]选课(树上背包 ...

  4. 动态规划报告(树形DP+概率DP

    动态规划报告 树形dp 树形 DP,即在树上进行的 DP.由于树固有的递归性质,树形 DP 一般都是递归进行的.一般需要在遍历树的同时维护所需的信息 以一道题目为例 2022CCPC桂林站G Grou ...

  5. 【树形DP】树形DP入门详解+例题剖析

    树形DP 树形DP准确的说是一种DP的思想,将DP建立在树状结构的基础上.整体的思路大致就是用树形的结构存储数据. 要学树形DP之前肯定是要先学会树和图的呀,至少先学会链式前向星,不会的话可以看一下我 ...

  6. 打卡第二天 树形DP初步

    1.P1352 没有上司的舞会 题目概述: 有n个人,除老板外每个人都有自己的上司k和快乐值l,但每个人都不能和自己的上司同时出现在舞会上,舞会的快乐值为所有到达舞会的人的快乐值总和,求其最大值. 题 ...

  7. 背包类树形DP 选课题解

    题目传送门; 我觉得题目给出0节点作为虚拟课程,也避免了我们要去想将若干个森林建成一棵树:将N个节点的森林建成了N+1条边的树: 其次,我们对这个题进行一个分析: 很容易想到F[x,t]表示以x为根的 ...

  8. 选课_ctsc1997_ssl1606_树形dp

    Description 大学里实行学分.每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分.学生最后的学分是他选修的各门课的学分的总和. 每个学生都要选择规定数量的课程.其中有些 ...

  9. (P2014[CTSC1997])选课(树上背包)

    题目链接:[CTSC1997] 选课 - 洛谷 分析:这是一道树上背包的模板题,什么是树上背包呢?就是说物品之间有依赖关系,就比如说选a就必须要先选b,选b又必须要先选c,大概就是这个意思,类似于我们 ...

最新文章

  1. 再见SpringMVC!linuxkafka安装单机集群
  2. ZOJ-2366 Weird Dissimilarity 动态规划+贪心
  3. 合肥市电力大数据应用工程技术研究中心成立
  4. Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image acquisi
  5. 进入保护模式(四)设置一些公用的方法
  6. 现代支付行号查询系统_旅游景区智能管理系统-景区智能导航软件
  7. matlab 计算指北角,用MATLAB如何计算出矩形区域内的最大值?
  8. java 中时间的比较 用compareTo方法
  9. ceph对象存储ceph-deploy部署记录
  10. 软件测试订单测试用例,测试用例 - 进销存软件测试.doc
  11. ORB-SLAM2代码详解
  12. PAT 乙级真题题解 java实现
  13. 清明上河图密码2笔记
  14. 别再用所谓的MD5加密了,大佬们都用它——>MD5盐值加密多方法详解
  15. python操作redis集群是连接池么_Python如何操作redis使用连接池
  16. [TcaplusDB] 行业新闻汇编(6月29日)
  17. GC是什么? 为什么要有GC?
  18. 【机器学习】极大似然估计、最大后验估计的对比与联系
  19. 上交计算机系专硕学费,上海交通大学2021级专硕学费再涨,最高翻3倍!@上海考研党...
  20. 新注册的邮箱如何群发邮件

热门文章

  1. DevOps——简析
  2. Web漏洞扫描神器Nikto
  3. Latent SVM
  4. html页面在ie上出现404怎么解决,ie浏览器网页上有错误显示不全的解决方法
  5. 人工智能导论练习题(下)
  6. 仿优酷视频焦点轮播图布局html页面前端源码
  7. HTTPS篇之SSL握手过程详解
  8. SparkCore项目实战 需求一Top10热门品类 需求二Top10热门品类下每个品类的Top10活跃用户统计 需求三计算页面单跳转换率
  9. 译:SQL Server 2008 新特性(3/3)
  10. html5 三目运算符,三目运算符和逗号运算符