题目: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)相关推荐

  1. 洛谷2014 选课(树形DP)树形背包问题

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  2. 洛谷P3354 Riv河流 [IOI2005] 树型dp

    正解:树型dp 解题报告: 传送门! 简要题意:有棵树,每个节点有个权值w,要求选k个节点,最大化∑dis*w,其中如果某个节点到根的路径上选了别的节点,dis指的是到达那个节点的距离 首先这个一看就 ...

  3. 其他OJ 树型DP 选课

    在朱全民的PPT介绍的一个树型DP经典题,<选课>,中文题目,不结束 找了很久找到了可以提交的OJ,重庆八中 http://www.cqoi.net:2012/JudgeOnline/pr ...

  4. 【树型DP】BZOJ1564 二叉查找树(noi2009)

    标签: 二叉查找树 [题目描述] 已知一棵特殊的二叉查找树.根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小. 另一方面,这棵查找树中每个结点都有一个权值 ...

  5. 【树型DP】加分二叉树

    问题 b: [树型DP]加分二叉树 时间限制: 1 Sec  内存限制: 64 MB 提交: 8  解决: 6 [提交] [状态] [讨论版] [命题人:admin] 题目描述 科技忽略了过程就是魔法 ...

  6. 二叉苹果树(树型DP+背包)

    二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点).这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号 ...

  7. POJ3342 Party at Hali-Bula(树型DP求最大独立集+唯一解判断)

    题意: 公司参加聚会,要求员工不能和他的上司同时参加,求最多能参加几个人并且判断解是否唯一. 要点: 树型DP的经典题,用dp[u][1]表示选取u的最大值,dp[u][0]表示不选取u的最大值,容易 ...

  8. 虚树+树型DP SDOI2011消耗战

    <虚树+树型DP> SDOI2011消耗战 #include <iostream> #include <cstdio> #include <cstring&g ...

  9. 洛谷 P3373 线段树2

    洛谷 P3373 线段树2 mul和pls更新某区间左右子树sum的时候,别忘了回头更新这个区间的sum 只有在传递给子序列之后,父序列的lz标记才能清零.其他时候,lz标记只增不减 #include ...

最新文章

  1. centos7.3上yum install nodejs
  2. axios请求拦截器错误_Axios使用拦截器全局处理请求重试
  3. 高效配置Linux代理服务器――Squid
  4. 清明节,如何用代码让网页变灰
  5. matlab设置ga算法,matlab遗传算法ga函数
  6. 生命剩下24小时应该做什么
  7. mysql 只显示箭头_为什么在DOS窗口中使用MySQL时,输入命令后只出现一个箭头,输入什么内容都是这样?...
  8. Linux驱动中断函数参数详解
  9. pyhton matplotlib可视化图像基础(二维函数图、柱状图、饼图、直方图以及折线图)...
  10. Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少(蓝桥基础实战)
  11. 舒适区、学习区、恐慌区
  12. 神武4手游等待服务器响应,《神武4》手游快速告别自闭 还能这样玩?
  13. 初学微信云开发,云函数实现两数相加
  14. gmap mysql cachet,MySQL的缓存(Query Cache)
  15. 用故事解析setTimeout和setInterval(内含js单线程和任务队列)
  16. 集成基于Websocket的Stomp连接
  17. 线性代数 05.07 用合同变换法化二次型为标准形
  18. 【论文阅读】24-USAC: A Universal Framework for Random Sample Consensus
  19. Kubernetes 初识Ingress Controller以及部署
  20. Maemo 5 SDK 安装使用

热门文章

  1. JMH 和 Arthas 定位问题的案例分享 !
  2. 如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始...
  3. 为什么要用这些框架来进行开发,直接new一个对象不香吗?
  4. Elasticsearch性能优化实战指南
  5. 水下机器人线上赛战火升级,目标检测、通信赛项等你来战
  6. 盘点深度学习中的各种数据增强技巧
  7. ShakeDrop:深度残差学习中的 ShakeDrop 正则化
  8. 让PyTorch训练速度更快,你需要掌握这17种方法
  9. 目前最好用的大规模强化学习算法训练库是什么?
  10. 给大家介绍一位中科院师兄,读研时通过实习和比赛收入五十万