首页 > 其他分享 >重学OI#4 简单dp

重学OI#4 简单dp

时间:2023-10-03 15:11:39浏览次数:37  
标签:cnt 重学 limits OI 不选 son 节点 dp

观前须知:本文顺序较为混乱,根据本人复习顺序写的,难度严格不递增

dp不像数据结构可以套路性的将,以例题为主吧

part 1:树形dp

树是一种非常好的结构,其天然的递归形态保证了最优子结构,使得dp有很好的发挥空间

一般状态与子树和路径有关,也有时扯到叶子节点,所以不套路化,特殊情况可能会一大把

下文记 \(W(u,v)\) 表示 \(u\) 和 \(v\) 之间的边权,单独写 \(W(u)\) 表示(有根树中)和父亲的连边长

\(son(x)\) 表示 \(x\) 的所有儿子组成集合,\(fa(x)\) 表示 \(x\) 的父节点

由于树天生的递归式结构,树形dp很难表现为递推的形式,通常表现为dfs

没有上司的舞会

给出一个 \(n\) 个节点的树,点有点权 \(A_x\),选出若干不直接相连的点使得点权最大化

不妨设 \(f_{i,j}\) (\(j=1/2\)),表示子树 \(i\) 中选与不选的最大答案

转移:\(f_{i,1}=A_i+\sum\limits_{v\in son(i)}f_{v,0}\),就是考虑选这个点后把所有子节点不选的值加上再加自己点权

\(f_{i,0}= \sum\limits_{v\in son(i)}\max(f_{v,0},f_{v,1})\) 反正自己不选,子节点随便选

由于dfs的回溯结构会在回溯时转移回根

时空 \(O(n)\)

Tree

求直径长度及数量

通常树形dp同时涉及值和数量需要开两个数组或者像上一题开个二维

记录两个变量 \(ans,cnt\) 表示长度和数量

设 \(f(i)\) 表示子树 \(i\) 内一端是 \(i\) 的最长链,\(g(i)\) 为数量,\(c(i)\) 记录当前的 \(f(i)\) 是由哪个子树转移过来的

考虑转移,父亲的 \(f(i)\) 一定是一个儿子的加上儿子到爹地的边权

$f(i)=\max\limits_{v\in son(i)}(f(v)+w_{i,v}) $

回溯时我们分两次更新:

先尝试用当前的 \(f(x)+\) 当前搜的儿子的 \(f+W(son)\) 更新答案,如果大于, $cnt=g[x]*g[son] $,等于 \(cnt+=g[x]*g[son]\)

然后类似的用儿子的 \(f+W(son)\) 更新 \(f(x),g(x)\),这样是不会重复计数的,因为前后你找的直径必定是本质不同的

...吧

标签:cnt,重学,limits,OI,不选,son,节点,dp
From: https://www.cnblogs.com/exut/p/17740841.html

相关文章

  • 论文解读:HybridCR: weakly-supervised 3D point cloud semantic segmentation via hybr
    HybridCR:weakly-supervised3Dpointcloudsemanticsegmentationviahybridcontrastiveregularization基于混合对比学习正则化约束的增强方法,Li等人(2022a)使用极少标注(0.03%)在室内点云数据集上获得的分割精度为全监督方法的78.3%。是第一个利用点一致性并以端到端方式采用......
  • 【题解】洛谷 P1003 [NOIP2011 提高组] 铺地毯
    原题链接解题思路如果直接按照题意开一个二维数组来模拟每个点最上面的地毯编号,会发现所占空间最坏情况下约为(2*105)2*4B=4*1010*4B=1.6*1011B≈149GB,程序完全无法运行。但实际上没有必要将每一个点的信息记录下来,只需要记录每一块地毯能覆盖哪些点,再依次判断哪那些地毯可以......
  • RDP远程登录后全屏,本地的任务栏始终显示的问题解决
    文章目录问题解决参考问题RDP远程登录后全屏,本地的任务栏(TaskBar)始终在下面,遮住了远程桌面的最下面,进行了解决。解决BestsolutionhowtohidelocalTaskbarwhenRDPtoaremotedesktopLaunchTaskManagerRight-click“WindowsExplorer”Select“Restart”Itworkson......
  • csps区间dp
    加分二叉树我们可以枚举中间这个k的位置,然后分别递归计算左右子树,这就让我们想到这是一个和区间有关的,我们可以用区间dp来解决。\(f[i][j]\)表示i,j这个区间的最大分值。用一个很板子的区间dp就可以解决了。至于求前序遍历,我们也只需要通过递归然后枚举中间的根,第一个满足......
  • 我个人今年csp/noip赛前复习列表:
    Part1、图论:1*、3种tarjan2、dij算法:暴力写法和heap优化3*、Prim算法:暴力与heap优化4、Floyd算法+矩阵5、直径求法(dp+dfs)与性质6、树的重心(dp求法)7*、差分约束系统建模方式8*、二分图相关问题9*、Dinic算法板子(骗分)10、基环树的一些常见写法(估计不会考)Part2、数据结构:......
  • [IOI2023] 山毛榉树
    题目链接1,题目链接2题目的“绝妙置换”定义较为复杂,我们无法直接进行转化。考虑列举出一些必要条件,从中寻找思路:对于树上的一条边\((x,y)\),其中\(x\)为\(y\)的父节点。那么\(x\)在绝妙置换中的位置必定小于\(y\)的位置。对于同个颜色节点的父亲集合,在绝妙置换中......
  • P5015 [NOIP2018 普及组] 标题统计
    题目描述传送门凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。输入格式输入文件只有一行,一个字符串\(s\)。输出格式输出文件只有一行,包含一个整数,即作......
  • P2824 [HEOI2016/TJOI2016] 排序
    针对区间排序,显然能够上值域线段树类似,但这里有个更强的做法。如果能转化成01序列,那么一个区间排序的时候,只需区间询问1的个数+区间修改就可以了。因为是排列,很清晰的二分一个mid,把大于等于它的设为1,小于它的设为0,再跑上面的算法,最后check一下询问位置是否为1即可。单调性?感性......
  • 洛谷 P5811 - [IOI2019] 景点划分
    小清新构造题。不妨假设\(a\leb\lec\)。显然我们会让大小为\(a,b\)的部分连通,这样肯定是不劣的。建出DFS树,考虑其重心\(r\),如果\(r\)的某个子树大小\(\gea\),我们在这个子树内挑一个大小为\(a\)的连通块,在抠掉这个子树之外的部分挑一个大小为\(b\)的连通块即可。......
  • P3956 [NOIP2017 普及组] 棋盘
    传送门P3956[NOIP2017普及组]棋盘不清楚曾师为什么把这个神奇的题目放在搜索\(search\)专栏,反正我用\(dijkstra\)水过去了,虽然\(dijkstra\)严格来说也是一种能够解决一般性最短路问题的算法。然后考虑这道题的建图。这道题来看首先是去除魔法的部分,一般地,任意一个点只......