洛谷2014选课(树型dp)
题目:https://www.luogu.org/problemnew/show/P2014
千万注意遍历 j 和 k 的边界!
0点很好用。
siz很好用。
#include<iostream> #include<cstdio> using namespace std; int n,m,a[305],f[305][305],cnt,l[305],siz[305],x; struct Node{int to,next; }edge[305]; bool b[305]; void add(int x,int y) {cnt++;edge[cnt].next=l[x];edge[cnt].to=y;l[x]=cnt; } void dfs(int cur) {if(b[cur])return;b[cur]=1;f[cur][1]=a[cur];siz[cur]++;for(int i=l[cur];i;i=edge[i].next){int v=edge[i].to;dfs(v);for(int j=min(m,siz[cur]+siz[v]);j>1;j--)// for(int k=max(j-siz[cur],0);k<=siz[v]&&k<j;k++)/////f[cur][j]=max(f[cur][j],f[cur][j-k]+f[v][k]);siz[cur]+=siz[v];} } int main() {scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d%d",&x,&a[i]);add(x,i);}for(int i=l[0];i;i=edge[i].next){int v=edge[i].to;dfs(v);for(int j=min(m,siz[0]+siz[v]);j;j--)/////for(int k=max(j-siz[0],0);k<=siz[v]&&k<=j;k++)/////f[0][j]=max(f[0][j],f[0][j-k]+f[v][k]);siz[0]+=siz[v];}printf("%d",f[0][m]);return 0; }
后续的故事:
考试的时候考出了原题,然后爆0……
关键在于倒序。首先一定不能忘记倒序,因为实质上是省了一维的;
而且这个倒序可以触及到1(甚至0也可以,因为有下面的k<j),这样的话在我们已有的所有 d[ ][ ] 中就已经包含了根节点的值了(别忘了提前赋 1 的值)。
siz的更新和 j,k 边界仍然需要注意。
转载于:https://www.cnblogs.com/Narh/p/8443423.html
洛谷2014选课(树型dp)相关推荐
- 洛谷2014 选课(树形DP)树形背包问题
题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...
- 洛谷P3354 Riv河流 [IOI2005] 树型dp
正解:树型dp 解题报告: 传送门! 简要题意:有棵树,每个节点有个权值w,要求选k个节点,最大化∑dis*w,其中如果某个节点到根的路径上选了别的节点,dis指的是到达那个节点的距离 首先这个一看就 ...
- 其他OJ 树型DP 选课
在朱全民的PPT介绍的一个树型DP经典题,<选课>,中文题目,不结束 找了很久找到了可以提交的OJ,重庆八中 http://www.cqoi.net:2012/JudgeOnline/pr ...
- 【树型DP】BZOJ1564 二叉查找树(noi2009)
标签: 二叉查找树 [题目描述] 已知一棵特殊的二叉查找树.根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小. 另一方面,这棵查找树中每个结点都有一个权值 ...
- 【树型DP】加分二叉树
问题 b: [树型DP]加分二叉树 时间限制: 1 Sec 内存限制: 64 MB 提交: 8 解决: 6 [提交] [状态] [讨论版] [命题人:admin] 题目描述 科技忽略了过程就是魔法 ...
- 二叉苹果树(树型DP+背包)
二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点).这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号 ...
- POJ3342 Party at Hali-Bula(树型DP求最大独立集+唯一解判断)
题意: 公司参加聚会,要求员工不能和他的上司同时参加,求最多能参加几个人并且判断解是否唯一. 要点: 树型DP的经典题,用dp[u][1]表示选取u的最大值,dp[u][0]表示不选取u的最大值,容易 ...
- 虚树+树型DP SDOI2011消耗战
<虚树+树型DP> SDOI2011消耗战 #include <iostream> #include <cstdio> #include <cstring&g ...
- 洛谷 P3373 线段树2
洛谷 P3373 线段树2 mul和pls更新某区间左右子树sum的时候,别忘了回头更新这个区间的sum 只有在传递给子序列之后,父序列的lz标记才能清零.其他时候,lz标记只增不减 #include ...
最新文章
- centos7.3上yum install nodejs
- axios请求拦截器错误_Axios使用拦截器全局处理请求重试
- 高效配置Linux代理服务器――Squid
- 清明节,如何用代码让网页变灰
- matlab设置ga算法,matlab遗传算法ga函数
- 生命剩下24小时应该做什么
- mysql 只显示箭头_为什么在DOS窗口中使用MySQL时,输入命令后只出现一个箭头,输入什么内容都是这样?...
- Linux驱动中断函数参数详解
- pyhton matplotlib可视化图像基础(二维函数图、柱状图、饼图、直方图以及折线图)...
- Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少(蓝桥基础实战)
- 舒适区、学习区、恐慌区
- 神武4手游等待服务器响应,《神武4》手游快速告别自闭 还能这样玩?
- 初学微信云开发,云函数实现两数相加
- gmap mysql cachet,MySQL的缓存(Query Cache)
- 用故事解析setTimeout和setInterval(内含js单线程和任务队列)
- 集成基于Websocket的Stomp连接
- 线性代数 05.07 用合同变换法化二次型为标准形
- 【论文阅读】24-USAC: A Universal Framework for Random Sample Consensus
- Kubernetes 初识Ingress Controller以及部署
- Maemo 5 SDK 安装使用