洛谷2014选课(树型dp)
题目:https://www.luogu.org/problemnew/show/P2014
千万注意遍历 j 和 k 的边界!
0点很好用。
siz很好用。
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,a[],f[][],cnt,l[],siz[],x;
struct Node{
int to,next;
}edge[];
bool b[];
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]=;
f[cur][]=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>;j--)//////
for(int k=max(j-siz[cur],);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=;i<=n;i++)
{
scanf("%d%d",&x,&a[i]);
add(x,i);
}
for(int i=l[];i;i=edge[i].next)
{
int v=edge[i].to;
dfs(v);
for(int j=min(m,siz[]+siz[v]);j;j--)/////
for(int k=max(j-siz[],);k<=siz[v]&&k<=j;k++)/////
f[][j]=max(f[][j],f[][j-k]+f[v][k]);
siz[]+=siz[v];
}
printf("%d",f[][m]);
return ;
}
后续的故事:
考试的时候考出了原题,然后爆0……
关键在于倒序。首先一定不能忘记倒序,因为实质上是省了一维的;
而且这个倒序可以触及到1(甚至0也可以,因为有下面的k<j),这样的话在我们已有的所有 d[ ][ ] 中就已经包含了根节点的值了(别忘了提前赋 1 的值)。
siz的更新和 j,k 边界仍然需要注意。
洛谷2014选课(树型dp)的更多相关文章
- C++ 洛谷 2014 选课 from_树形DP
洛谷 2014 选课 没学树形DP的,看一下. 首先要学会多叉树转二叉树. 树有很多种,二叉树是一种人人喜欢的数据结构,简单而且规则.但一般来说,树形动规的题目很少出现二叉树,因此将多叉树转成二叉树就 ...
- 洛谷$2014$ 选课 背包类树形$DP$
luogu Sol 阶段和状态都是树形DP板子题,这里只讲一下背包的部分(转移)叭 它其实是一个分组背包模型,具体理解如下: 对于一个结点x,它由它的子结点y转移而来 在子结点y为根的树中可以选不同数 ...
- 洛谷2014 选课(树形DP)树形背包问题
题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...
- 【题解】Luogu p2014 选课 树型dp
题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...
- 选课 - 树型DP(孩子兄弟建树法)
题目描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N<300)门的选修课程,每个学生可选课程的数量 M 是给定的.学生选修了这M门课并考核通 ...
- 洛谷P3354 Riv河流 [IOI2005] 树型dp
正解:树型dp 解题报告: 传送门! 简要题意:有棵树,每个节点有个权值w,要求选k个节点,最大化∑dis*w,其中如果某个节点到根的路径上选了别的节点,dis指的是到达那个节点的距离 首先这个一看就 ...
- 树形DP 洛谷P2014 选课
洛谷P2014 选课 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门 ...
- 洛谷 P2014 选课(树形背包)
洛谷 P2014 选课(树形背包) 思路 题面:洛谷 P2014 如题这种有依赖性的任务可以用一棵树表示,因为一个儿子要访问到就必须先访问到父亲.然后,本来本题所有树是森林(没有共同祖先),但是题中的 ...
- 初学树型dp
树型DP DFS的回溯是树形DP的重点以及核心,当回溯结束后,root的子树已经被遍历完并处理完了.这便是树形DP的最重要的特点 自己认为应该注意的点 好多人都说在更新当前节点时,它的儿子结点都给更新 ...
随机推荐
- Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'e ...
- Activiti工作流笔记(4)
Activiti工作流启动流程 /** * 启动流程 * */ public class ActivitiTest2 { RepositoryService repositoryService; Ru ...
- Oracle 12cR1中性能优化新特性之全数据库缓冲模式
通常情况下,Oracle会决定哪些数据会留在缓冲区中.当没足够的空间时,数据会被写出内存.此外,为了避免大量读取将有用的信息挤出缓冲区,Oracle对有些操作也许会才去绕过缓冲区的措施.Oracle1 ...
- ES 分布式搜索
ES整个查询过程是scatter/gather的过程,具体如下: 图见 https://blog.csdn.net/thomas0yang/article/details/78572596?utm_s ...
- Java——文件过滤器
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- Android Studio 常用快捷键大全
鉴于使用AndroidStudio进行Android 开发的人越来越多,笔者整理了一些常用的快捷键.方便读者查阅,提高开发效率.
- IO文件相关操作
IO编程 IO 即Input/Output input stream 就是数据从外面(磁盘.网络)流进内存,output stream 就是数据从内存流到外面去. 通常cpu 和 内存的速度远远高于 ...
- DevExpress v18.1新版亮点——ASP.NET篇(二)
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress ASP.NET v18.1 的新功能,快来下载试用新版本!点 ...
- DevExpress v17.2新版亮点—.NET Reporting篇(一)
用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了.NET Reporting v17.2 的新功能,快来下载试用新版本! All ...
- Linux:挂载
挂载