P2014 [CTSC1997] 选课(树形dp)
题目链接
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)相关推荐
- 【每日DP】day 8、P2014 [CTSC1997]选课(树形DP(树形背包)模板)难度⭐⭐⭐
P2014 [CTSC1997]选课 题意为选一门课前要看它是否有前提条件:即选了一门主课才能选 "副科",所以可以树形背包来做. 注意是不能用分组背包来做,因为这道题附件有很多个 ...
- [Luogu P2014]选课 (树形DP)
题面 传送门:https://www.luogu.org/problemnew/show/P2014 Solution 这是一道十分经典的树形DP题,这种类型的树形DP有一种很普遍的解法. 首先,观察 ...
- 0x54. 动态规划 - 树形DP(习题详解 × 12)
目录 0x54.1 树形DP Problem A. 没有上司的舞会 Problem B. 战略游戏 0x54.2 树上背包 Problem A. 选课 Problem B.[数据加强版]选课(树上背包 ...
- 动态规划报告(树形DP+概率DP
动态规划报告 树形dp 树形 DP,即在树上进行的 DP.由于树固有的递归性质,树形 DP 一般都是递归进行的.一般需要在遍历树的同时维护所需的信息 以一道题目为例 2022CCPC桂林站G Grou ...
- 【树形DP】树形DP入门详解+例题剖析
树形DP 树形DP准确的说是一种DP的思想,将DP建立在树状结构的基础上.整体的思路大致就是用树形的结构存储数据. 要学树形DP之前肯定是要先学会树和图的呀,至少先学会链式前向星,不会的话可以看一下我 ...
- 打卡第二天 树形DP初步
1.P1352 没有上司的舞会 题目概述: 有n个人,除老板外每个人都有自己的上司k和快乐值l,但每个人都不能和自己的上司同时出现在舞会上,舞会的快乐值为所有到达舞会的人的快乐值总和,求其最大值. 题 ...
- 背包类树形DP 选课题解
题目传送门; 我觉得题目给出0节点作为虚拟课程,也避免了我们要去想将若干个森林建成一棵树:将N个节点的森林建成了N+1条边的树: 其次,我们对这个题进行一个分析: 很容易想到F[x,t]表示以x为根的 ...
- 选课_ctsc1997_ssl1606_树形dp
Description 大学里实行学分.每门课程都有一定的学分,学生只要选修了这门课并考核通过就能获得相应的学分.学生最后的学分是他选修的各门课的学分的总和. 每个学生都要选择规定数量的课程.其中有些 ...
- (P2014[CTSC1997])选课(树上背包)
题目链接:[CTSC1997] 选课 - 洛谷 分析:这是一道树上背包的模板题,什么是树上背包呢?就是说物品之间有依赖关系,就比如说选a就必须要先选b,选b又必须要先选c,大概就是这个意思,类似于我们 ...
最新文章
- 【C++】C++11 STL算法(九):番外篇
- 《代码敲不队》第八次团队作业:Alpha冲刺 第二天
- php mysql study_phpStudy 升级 MySQL5.7
- HLG 1539 选课
- 四周有阴影_四周窄边全功能TypeC 飞利浦256P1FR评测
- Lambda表达式介绍
- Kubernetes之路 1 - Java应用资源限制的迷思
- IDEA快捷键及使用技巧
- 11. Java基础之继承
- ssl1761-城市问题【图论,最短路,Dijkstra】
- np.random.choice用法
- mysql 存储引擎版本_mysql不同版本和存储引擎选型的验证
- AbstractQueuedSynchronizer浅析——同步
- H264帧的分析sps pps
- 数据分析学习笔记—python函数、异常与处理
- C#基础概念面试题(更新中)
- 解决input输入中文时,拼音在输入框内会触发input事件的问题
- GUID(GPT)分区格式安装Win7系统激活工具
- webgl漫反射公式物理原理猜测
- @ 剑指offer(python)最小的k个数