news 2026/4/29 11:46:06

20250927树形DP

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
20250927树形DP

引子

树形DP是一种在树上的动态规划,利用树的递归特性在树上进行状态转移。

树状DP主要分为两类:

  1. 独立型:兄弟节点间无相互约束
  2. 依赖型:兄弟节点间存在相互约束

独立型树状DP的特点是兄弟节点的状态互不影响,各自独立计算。就比如没有上司的舞会。

依赖型树状DP则表现为兄弟节点状态之间存在制约关系,状态分配需要权衡取舍(如资源分配问题)。就比如二叉苹果树。

H P1352 没有上司的舞会

简化题意:有 n 个点,他们的从属关系用一颗树来表示,父结点是子结点的直接上司。每个点有一个点权,求拿出若干个点且这若干个点的任意两点无从属关系的最大点权和。

我们定义状态dp[i][0/1]表示以节点𝑖为根的子树的最大点权值。其中:

  • 第二维取0表示节点 i 不参加舞会
  • 第二维取1表示节点 i 参加舞会

状态转移方程如下(设 v 为 x 的子节点):

  1. 当 x 不参加舞会时:
    dp[x][0]+=max(dp[v][1],dp[v][0]);
    即子节点可以自由选择是否参加
  2. 当 x 参加舞会时:
    dp[x][1]+=dp[v][0];
    此时所有子节点都不能参加

我们用DFS遍历这棵树,在回溯时更新每个节点的DP。

#include<bits/stdc++.h>usingnamespacestd;intr[6005],dp[6005][2];vector<int>E[6005];voiddfs(intx,intfa){dp[x][1]=r[x];for(inti=0;i<E[x].size();i++){intv=E[x][i];if(v==fa)continue;dfs(v,x);dp[x][0]+=max(dp[v][1],dp[v][0]);dp[x][1]+=dp[v][0];}}intmain(){intn;cin>>n;for(inti=1;i<=n;i++){cin>>r[i];}for(inti=1;i<n;i++){intu,v;cin>>u>>v;E[u].push_back(v);E[v].push_back(u);}dfs(1,0);cout<<max(dp[1][0],dp[1][1]);return0;}

J P2015 二叉苹果树

题意:给定一棵树,n 个点,有边权,至少保留 q 条边,求最大边权和。

1.q 条边分到左子树多,那么右子树就少,兄弟节点间有数量约束,考虑第二类树型DP。

2.状态:dp[i][j]表示以 i 为根节点的子树保留至多 j 条边的最大边权和。

3.答案:dp[1][q]

4.状态转移:

intv=E[x][i].v,w=E[x][i].w;if(v==fa)continue;dfs(v,x);sz[x]+=sz[v];for(intj=min(q,sz[x]);j>=0;j--){for(intk=0;k<=min(j-1,sz[v]);k++){dp[x][j]=max(dp[x][j],dp[v][k]+dp[x][j-k-1]+w);}}

5.初始状态:dp[x][0]=0

#include<bits/stdc++.h>usingnamespacestd;structnode{intu,v,w;};vector<node>E[105];intn,q,sz[105],dp[105][105];voiddfs(intx,intfa){sz[x]=1;for(inti=0;i<E[x].size();i++){intv=E[x][i].v,w=E[x][i].w;if(v==fa)continue;dfs(v,x);sz[x]+=sz[v];for(intj=min(q,sz[x]);j>=0;j--){for(intk=0;k<=min(j-1,sz[v]);k++){dp[x][j]=max(dp[x][j],dp[v][k]+dp[x][j-k-1]+w);}}}}intmain(){cin>>n>>q;for(inti=1;i<n;i++){intu,v,w;cin>>u>>v>>w;E[u].push_back({u,v,w});E[v].push_back({v,u,w});}dfs(1,0);cout<<dp[1][q];return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 20:44:36

Spot实例竞价:短期任务节省开支

Spot实例竞价&#xff1a;短期任务节省开支 在AI应用日益普及的今天&#xff0c;越来越多团队希望部署私有化的智能问答系统——比如基于文档的RAG引擎或企业知识助手。但现实往往令人却步&#xff1a;一块GPU云服务器动辄每月数千元&#xff0c;而大部分时间系统其实处于闲置…

作者头像 李华
网站建设 2026/4/25 12:42:50

数字信号处理篇---共轭对称性

一句话核心思想如果一个信号是“实数”的&#xff08;你在现实世界能测量到的&#xff0c;比如声音、电压&#xff09;&#xff0c;那么它的频谱&#xff08;傅里叶变换结果&#xff09;就像一张左右对称的剪纸。你只需要知道右半边&#xff0c;左半边就是它的“镜像”。第一步…

作者头像 李华
网站建设 2026/4/23 4:51:34

灾备切换实战测试:确保系统永不停机

灾备切换实战测试&#xff1a;确保系统永不停机 在金融、医疗和法律等行业&#xff0c;AI系统已不再是“锦上添花”的辅助工具&#xff0c;而是支撑核心业务运转的关键基础设施。一旦知识问答平台宕机几分钟&#xff0c;可能意味着客户合同审查停滞、内部技术支持中断&#xff…

作者头像 李华
网站建设 2026/4/27 22:13:36

探秘微观世界:噬菌体展示技术如何构建“分子宝库”并精准“捕手”

在现代生命科学的工具库中&#xff0c;有一项技术能够高效地从数十亿分子中快速找出能与特定目标结合的“那把钥匙”&#xff0c;它就是噬菌体展示技术。这项技术的强大能力&#xff0c;始于一个最为关键的奠基性步骤——噬菌体展示文库构建。今天&#xff0c;我们就一起走进这…

作者头像 李华
网站建设 2026/4/26 7:39:26

传输中加密:TLS1.3最新协议支持

传输中加密&#xff1a;TLS1.3最新协议支持 在当今 AI 应用广泛渗透企业与个人场景的背景下&#xff0c;一个看似基础却至关重要的问题正变得愈发敏感——数据在“路上”是否安全&#xff1f; 设想这样一个画面&#xff1a;你在 anything-llm 中上传了一份包含公司未来战略规划…

作者头像 李华