数位dp&&树形dp

本文探讨了数位动态规划在处理数字区间问题中的应用,以及树形DP在解决树结构数据上的递归策略。通过举例说明windy数的计数问题和宴会邀请的快乐指数最大化,阐述了数位dp的处理技巧。同时,介绍了树形DP的两种形式——常规树形DP和换根DP,并以寻找最大深度之和节点的问题为例展示了它们的解决过程。文章强调了DFS在树形DP中的核心地位,并暗示树形DP的复杂性和深度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数位dp

数位dp常用的思想就是从高位往低位考虑,考虑区间问题时搞前缀和之差,题目的形式多变在于取数的规则,在数据比较大时或者规则比较复杂时需要结合字符串的一些算法进行处理(好吧AC自动机都不会不配写这种题)

例题:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 windy 数。windy 想知道,在 aa 和 bb 之间,包括 aa 和 bb ,总共有多少个 windy 数?

套用上述数位dp的特色思想预处理一下状态,so easy...

树形dp

树形 DP,即在树上进行的 DP。由于树固有的递归性质,树形 DP 一般都是递归进行的。

例题:某大学有 N个职员,编号为1~N 。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数ai ,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。

 像这样进行树上的dp,常常以根节点作为状态进行状态的转移。

换根 DP(也是树上dp的一种)

树形 DP 中的换根 DP 问题又被称为二次扫描,通常不会指定根结点,并且根结点的变化会对一些值,例如子结点深度和、点权和等产生影响。

通常需要两次 DFS,第一次 DFS 预处理诸如深度,点权和之类的信息,在第二次 DFS 开始运行换根动态规划。

例题:给定一个N个点的树,请求出一个结点,使得以这个结点为根时,所有结点的深度之和最大。

上述问题只要跑多两次dfs就能解决。

由此可见,dfs对于树上dp的重要地位。

你以为树形dp就这么简单,too young too naive...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值