当前位置: 首页 > news >正文

【动态规划】树形dp

参考文章:

  • 树形dp讲解(你不会后悔点进来)
  • 动态规划进阶(六):树形DP原理详解

核心思想:DFS遍历 +记忆化

  • 自底向上,后序遍历,父节点最优解从子节点转移过来

状态
节点维度:dp[u][s] 表示节点u在状态s下的最优解
常见状态:

  • 选择/不选当前节点
  • 颜色标记(如红黑树着色问题)
  • 距离限制(如树的直径)

典:没有上司的舞会

父节点最优解从子节点转移过来

  • 结构:领导下属的关系类似树
  • 状态:一个节点有两种状态,要么去要么不去
  • 转移:
    • 父节点去,子节点一定不去
    • 父节点不去,子节点可以去也可以不去
    • 转移方程
      • d p [ f ] [ 0 ] + = m a x ( d p [ s ] [ 0 ] , d p [ s ] [ 1 ] ) dp[f][0]+=max(dp[s][0],dp[s][1]) dp[f][0]+=max(dp[s][0],dp[s][1])
      • d p [ f ] [ 1 ] + = d p [ s ] [ 0 ] dp[f][1]+=dp[s][0] dp[f][1]+=dp[s][0]
const int N = 6e3+10;
int la[N],tr[N],nxt[N];//记录树
int head[N];//记录是否为根节点
int hp[N];//快乐指数
int cnt=1;
void add(int f,int s){//链式前向星 记录树结构tr[cnt]=s;nxt[cnt]=la[f];la[f]=cnt;cnt++;
}
int sum[N][2];//记录最优解
void dp(int root){//递归遍历树sum[root][0]=0;//不去sum[root][1]=hp[root];//去for(int i=la[root];i>=1;i=nxt[i]){int s=tr[i];//找儿子的值dp(s);//dfs一个儿子走到黑 自底向上sum[root][0]+=max(sum[s][1],sum[s][0]);sum[root][1]+=sum[s][0];}
}
void solve(){int n;cin>>n;forr(i,1,n){cin>>hp[i];}forr(i,1,n-1){int f,s;cin>>s>>f;add(f,s);head[s]=1;}int hd;forr(i,1,n)if(head[i]==0){hd=i;break;}// cout<<hd<<endl;dp(hd);// forr(i,1,n)cout<<sum[hd][0]<<' '<<sum[hd][1]<<endl;cout<<max(sum[hd][0],sum[hd][1])<<endl;
}
http://www.xdnf.cn/news/104185.html

相关文章:

  • 【网络入侵检测】Suricata之入侵防御(IPS)模式
  • RedisTemplate序列化器
  • 物体识别(1)
  • 【Maven】特殊pom.xml配置文件 - BOM
  • vue2+Vant 定制主题
  • 拆解大模型“越狱”攻击:对抗样本如何撕开AI安全护栏?
  • 数据结构(四)-双向链表
  • C++入门基础(2)
  • 智能配送机器人控制系统设计
  • 边缘计算在工业自动化中的应用:开启智能制造新时代
  • 【ASR学习笔记】常见VAD模型识别语音活动的方式对比
  • Pthon流程控制
  • Ubuntu 环境下控制蓝牙适配器
  • 【CSS】层叠,优先级与继承(三):超详细继承知识点
  • 如何在编译命令中添加灰度标识
  • 局部最小实验--用最小成本确保方向正确
  • Python实现孔填充与坐标转换
  • 基于STM32、HAL库的MCP42010T数字电位器驱动程序设计
  • 机器学习算法-朴素贝叶斯(附带拉普拉斯平滑处理)
  • 【JAVA】读取windows的串口信息
  • SqlSugar与Entity Framework (EF)的SWOT分析
  • Inxpect 新推高性价比版毫米波安全雷达:以经济实用护航工业安全
  • 游戏开发核心技术解析——从引擎架构到攻防体系的完整技能树
  • 阿里云 AI 搜索开放平台:RAG智能化工作流助力 AI 搜索
  • 【C语言】C语言中的字符函数和字符串函数全解析
  • Pingora vs. Nginx vs. 其他主流代理服务器性能对比
  • 2024从Maven-MySQL-Nginx部署
  • LeetCode热题100--283.移动零--简单
  • Linux中进程的属性:状态
  • 3.4 Agent的生命周期管理:任务分解、状态管理与反馈机制