洛谷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的最重要的特点 自己认为应该注意的点 好多人都说在更新当前节点时,它的儿子结点都给更新 ...
随机推荐
- 通过AO连接多个EO并进行使用
参考资料 在toolbox下的Tutorial工程里面 \oracle\apps\fnd\framework\toolbox\tutorial\server\PurchaseOrdersSVO
- @ConditionalOnProperty 详解
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHOD}) @Documented @Con ...
- 无法打开物理文件“E:\Database\VRVIES6841-FZ01-Global\VRVEIS.mdf”。操作系统错误 5:“5(拒绝访问。)”
在用SQLServer2012附加SQLServer2000备份的数据库事,报如下错误: 无法打开物理文件“E:\Database\VRVIES6841-FZ01-Global\VRVEIS.mdf” ...
- JS常用操作方法图表
截取字符串方法 方法名 参数 返回值 例子 String.prototype.substr() (indexStart, length) 都可为负数,length为负数时自动转为0,length不传默 ...
- PHP:第四章——PHP数组处理函数
<pre> <?php //数组处理函数 header("Content-Type:text/html;charset=utf-8"); //compact(); ...
- 取TTable 过滤后的记录数
http://bbs.csdn.net/topics/100057274 可以用AstaClientDataSet这个控件,有filterCount这个属性.另外你还可看它的源码,就能写出filter ...
- 栈(stack),C++模板实现
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- sql server 表结构 导出 到excel
SELECT 表名 then d.name else '' end, 表说明 then isnull(f.value,'') else '' end, -- 字段序号 = a.colorder, 字段 ...
- TJson.format() 输出错误的CRLF
下面的JSON串: { "a":"x=\"a,b\"" } 通过下面代码输出,多了CRLF: procedure JsonFormatTes ...
- UIActivityIndicatorView使用
UIActivityIndicatorView显示一个标准的旋转进度轮,类似网页AJAX加载时的图标. let loadIndicator = UIActivityIndicatorView(fram ...