洛谷P4719 【模板】动态dp

题目链接

ddp就是通过加法对min/max的分配率把原来不好维护的dp转移搞成可以遵循分配率的矩阵形式,自然就以用一些数据结构去维护
比如说这题求最大权独立集
先写出转移方程
dp[u][0/1]表示该点取或者不取时该点为根的子树的最大权独立集
dp[u][0]= ∑ \sum max(dp[v][0],dp[v][1])
dp[u][1]=( ∑ \sum dp[v][0]) +val[u]
数据结构维护的话就是LCT或者树链剖分
LCT好久不写了懒得写,就想想树剖吧
考虑线段树上查询的一个区间关系大抵是父亲和重儿子
那么就令g[u][0]表示该点不选时除重儿子以外的dp值之和
g[u][0]= ∑ ( v ≠ s o n ) \sum(v\neq son) (v̸=son)max(dp[v][0],dp[v][1])
g[u][1]=( ∑ ( v ≠ s o n ) \sum(v\neq son) (v̸=son)dp[v][0])+val[u]
重写转移方程
dp[u][0]=max(dp[son][0],dp[son][1])+g[u][0]
dp[u][1]=dp[son][0]+g[u][1]
写出矩阵
[ g [ u ] [ 0 ] g [ u ] [ 0 ] g [ u ] [ 1 ] − ∞ ] [ d p [ s o n ] [ 0 ] d p [ s o n ] [ 1 ] ] = [ d p [ u ] [ 0 ] d p [ u ] [ 1 ] ] \left[ \begin{matrix} g[u][0]& g[u][0] \\ g[u][1] & -\infty \end{matrix} \right] \left[ \begin{matrix} dp[son][0] \\ dp[son][1] \end{matrix} \right]= \left[ \begin{matrix} dp[u][0] \\ dp[u][1] \end{matrix} \right] [g[u][0]g[u][1]g[u][0]][dp[son][0]dp[son][1]]=[dp[u][0]dp[u][1]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值